home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
oasis.zip
/
OASDOC1.TXT
< prev
next >
Wrap
Text File
|
1988-08-05
|
521KB
|
16,435 lines
Open Architecture Open Architecture
Screen Interface System Screen Interface System
( O A S I S ) ( O A S I S )
Version 4.1 - Evaluation Version 4.1 - Evaluation
EUREKA SOFTWARE ASSOCIATES EUREKA SOFTWARE ASSOCIATES
REFERENCE MANUAL REFERENCE MANUAL
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
O A S I S
NOTICE NOTICE ______
This document and the information contained herein as well as the
described software 'OASIS' (Open Architecture Screen Interface
System) are protected by international copyright law and treaty
provisions.
They are provided to you under a shareware scheme whose conditions
and terms are explained in Appendix B of this manual and may only be
used in accordance with these conditions.
Both this documentation and the program are provided strictly on an Both this documentation and the program are provided strictly on an
'As Is' Basis. 'As Is' Basis.
There is no warranty, expressed or implied, with respect to the
program or the documentation, including but not limited to
merchantability and fitness for a particular purpose with respect to
defects in the program or the documentation. In no event shall Martin
Hossfeld be liable for any loss of profit or any other damage,
including but not limited to special, incidental, consequential or
other damages.
Copyright (C) 1987, 1988
EUREKA SOFTWARE ASSOCIATES
Martin Hossfeld Remy Fesnoux
12, Pinewood Green 2344 Yorkshire
Iver Heath, Bucks. SL0 0QP Ann Arbor, MI 48104
United Kingdom USA
All Rights Reserved. All Rights Reserved.
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Acknowledgements Acknowledgements ________________
IBM, IBM PC, XT, AT and PC DOS are trademarks of International
Business Machines Corporation.
Burroughs and TD830 are trademarks of Unisys Corporation.
Turbo Pascal is a registered trademark of Borland International Inc.
MS DOS is a registered trademark of Microsoft Corporation.
Hercules Craphics Card is a trademark of Hercules Computer
Technology.
OASIS, SFD, SCL, Screen Format Designer, Screen Control Language and
Open Architecture Screen Interface System are trademarks of EUREKA
SOFTWARE ASSOCIATES.
'Lightning' is a trademark of PCSG Inc.
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Introduction Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 12
What is OASIS? . . . . . . . . . . . . . . . . . . . . . . 12
About this manual . . . . . . . . . . . . . . . . . . . . . 13
What this manual assumes . . . . . . . . . . . . . . . . . 14
What you will learn . . . . . . . . . . . . . . . . . . . . 14
Chapter I Chapter I . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
The Screen Format Designer (SFD) . . . . . . . . . . . . . 20
The Screen Control Language (SCL) . . . . . . . . . . . . . 21
Application programs written with OASIS . . . . . . . . . . 22
Some Feature Explanations . . . . . . . . . . . . . . . . . 23
Screen Related Program Parameters . . . . . . . . . . 23
Colors and Display Attributes . . . . . . . . . . . . 23
Non Standard Keyboard Layouts . . . . . . . . . . . . 23
Program development with OASIS . . . . . . . . . . . . . . . . . 24
A. Declarative Phase . . . . . . . . . . . . . . . . . . . 24
B. Procedural Phase . . . . . . . . . . . . . . . . . . . . 25
Differences to traditional program development . . . . . . . . . 26
What instead of how . . . . . . . . . . . . . . . . . . . . 26
Early Tests . . . . . . . . . . . . . . . . . . . . . . . . 26
Less Programming . . . . . . . . . . . . . . . . . . . . . 26
Easier changes . . . . . . . . . . . . . . . . . . . . . . 26
Nationalization, customization made simple . . . . . . . . 26
System Installation and Setup . . . . . . . . . . . . . . . . . 27
The Distribution Disks . . . . . . . . . . . . . . . . . . 27
System Requirements . . . . . . . . . . . . . . . . . . . . 28
Installation Instructions . . . . . . . . . . . . . . . . . 29
Chapter II Chapter II . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Explanation of keyboard functions . . . . . . . . . . . . . . . 33
Variables and Constants . . . . . . . . . . . . . . . . . . 33
Variable field specials . . . . . . . . . . . . . . . . . . 34
Editing keys . . . . . . . . . . . . . . . . . . . . . . . 34
Return . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Escape . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Function keys . . . . . . . . . . . . . . . . . . . . . . . 36
Errors & Automatic Help System . . . . . . . . . . . . . . . . . 37
Invalid data entry . . . . . . . . . . . . . . . . . . . . 37
Missing mandatory data . . . . . . . . . . . . . . . . . . 37
Autohelp feature . . . . . . . . . . . . . . . . . . . . . 37
Design Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Designing a format layout . . . . . . . . . . . . . . . . . 40
Layout editor - Meaning of keys . . . . . . . . . . 41
Changing the Format Size . . . . . . . . . . . . . . . 42
Introduction page 4 Introduction page 4
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Drawing fields . . . . . . . . . . . . . . . . . . . . 43
Drawing boxes . . . . . . . . . . . . . . . . . . . . 44
Selecting Linestyles . . . . . . . . . . . . . . . . . 45
Field specifications . . . . . . . . . . . . . . . . . 46
Format Control Specifications . . . . . . . . . . . . 49
User Function Key Specifications . . . . . . . . . . . 49
Testing a Format . . . . . . . . . . . . . . . . . . . . . 51
Change field specs/Active field . . . . . . . . . . . 51
Change field specs/Other field . . . . . . . . . . . . 51
Global Colors/Attributes . . . . . . . . . . . . . . . 51
Format/Control Specs . . . . . . . . . . . . . . . . . 51
Colors/Attributes . . . . . . . . . . . . . . . . . . . . . 52
Field Attributes . . . . . . . . . . . . . . . . . . . 52
Color Screen Attributes . . . . . . . . . . . . . . . 53
Monochrome Attributes . . . . . . . . . . . . . . . . 54
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . 55
Functional Description - Introduction . . . . . . . . . . . . . 57
SFD Basic Program Layout . . . . . . . . . . . . . . . . . 58
Files used by SFD . . . . . . . . . . . . . . . . . . . . . 59
SFD.FOR . . . . . . . . . . . . . . . . . . . . . . . 59
SFD.FIN . . . . . . . . . . . . . . . . . . . . . . . 59
SFD.MSG . . . . . . . . . . . . . . . . . . . . . . . 59
SFD.ERR . . . . . . . . . . . . . . . . . . . . . . . 59
SFD.DEF . . . . . . . . . . . . . . . . . . . . . . . 59
Files generated by SFD . . . . . . . . . . . . . . . . . . 60
<workfile>.SCS . . . . . . . . . . . . . . . . . . . . 60
<workfile>.SCI . . . . . . . . . . . . . . . . . . . . 60
<workfile>.MSG . . . . . . . . . . . . . . . . . . . . 60
Basic Keyboard Functions . . . . . . . . . . . . . . . . . 61
Online Help Facility . . . . . . . . . . . . . . . . . . . 62
Explanatory field input informations . . . . . . . . . 62
AutoHelp . . . . . . . . . . . . . . . . . . . . . . . 62
Format Help . . . . . . . . . . . . . . . . . . . . . 62
Field Help . . . . . . . . . . . . . . . . . . . . . . 62
Input Error Handling . . . . . . . . . . . . . . . . . . . 63
Invalid Key . . . . . . . . . . . . . . . . . . . . . 63
Wrong data . . . . . . . . . . . . . . . . . . . . . . 63
Missing mandatory data . . . . . . . . . . . . . . . . 63
The Main Menu . . . . . . . . . . . . . . . . . . . . . . . . . 64
The Menu Header . . . . . . . . . . . . . . . . . . . . . . 64
Act DIR . . . . . . . . . . . . . . . . . . . . . . . 64
Workfile . . . . . . . . . . . . . . . . . . . . . . . 64
Formats . . . . . . . . . . . . . . . . . . . . . . . 64
The Main body . . . . . . . . . . . . . . . . . . . . . . . 64
The Message Line . . . . . . . . . . . . . . . . . . . . . 64
DESIGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Load File . . . . . . . . . . . . . . . . . . . . . . . . . 66
CHDir . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Crunch . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Introduction page 5 Introduction page 5
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Delete . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Undelete . . . . . . . . . . . . . . . . . . . . . . . . . 68
Transfer . . . . . . . . . . . . . . . . . . . . . . . . . 68
DISPLAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Formats . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Directory . . . . . . . . . . . . . . . . . . . . . . . . . 69
PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Single format . . . . . . . . . . . . . . . . . . . . . . . 70
All formats . . . . . . . . . . . . . . . . . . . . . . . . 70
Format list . . . . . . . . . . . . . . . . . . . . . . . . 70
DEFAULTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Design . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Left Field Limit . . . . . . . . . . . . . . . . . . . 71
Right Field Limit . . . . . . . . . . . . . . . . . . 71
Background Color . . . . . . . . . . . . . . . . . . . 71
Foreground Color . . . . . . . . . . . . . . . . . . . 71
Surrounding Area . . . . . . . . . . . . . . . . . . . 72
System defaults . . . . . . . . . . . . . . . . . . . . . . 73
Auto Help . . . . . . . . . . . . . . . . . . . . . . 73
After n Errors . . . . . . . . . . . . . . . . . . . . 73
Beep yes/no . . . . . . . . . . . . . . . . . . . . . 73
Length (ms) . . . . . . . . . . . . . . . . . . . . . 73
Pitch (Hz) . . . . . . . . . . . . . . . . . . . . . . 73
Field Blink Frequency . . . . . . . . . . . . . . . . 73
Char YES . . . . . . . . . . . . . . . . . . . . . . . 74
Char NO . . . . . . . . . . . . . . . . . . . . . . . 74
Cursor Wraparound Disabled . . . . . . . . . . . . . . 74
EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Terminate Program . . . . . . . . . . . . . . . . . . . . . 75
Format Design . . . . . . . . . . . . . . . . . . . . . . . . . 76
Basic Work Flow . . . . . . . . . . . . . . . . . . . . . . . . 76
The Layout Editor . . . . . . . . . . . . . . . . . . . . . 77
Layout editor Meaning of keys . . . . . . . . . . . . 78
Drawing Fields . . . . . . . . . . . . . . . . . . . . 79
Special Functions . . . . . . . . . . . . . . . . . . 80
Menu Functions . . . . . . . . . . . . . . . . . . . . 83
Format Specifications . . . . . . . . . . . . . . . . 85
The Test Feature . . . . . . . . . . . . . . . . . . . . . 94
Introduction . . . . . . . . . . . . . . . . . . . . . 94
The local Menu . . . . . . . . . . . . . . . . . . . . 94
System Limitations . . . . . . . . . . . . . . . . . . 95
Chapter III Chapter III . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 100
SCL Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Introduction page 6 Introduction page 6
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL.TPU . . . . . . . . . . . . . . . . . . . . . . . . . . 101
SCL.ERR . . . . . . . . . . . . . . . . . . . . . . . . . . 101
SCL - Global Declarations . . . . . . . . . . . . . . . . . . . 102
General . . . . . . . . . . . . . . . . . . . . . . . . . . 102
SCL Control Parameters . . . . . . . . . . . . . . . . . . 103
Max_Error_Messages . . . . . . . . . . . . . . . . . . 103
Max_Input_Messages . . . . . . . . . . . . . . . . . . 103
Max_Heap_Screens . . . . . . . . . . . . . . . . . . . 103
File Names . . . . . . . . . . . . . . . . . . . . . . . . 104
Screenfile_Ext . . . . . . . . . . . . . . . . . . . . 104
Indexfile_Ext . . . . . . . . . . . . . . . . . . . . 104
Errorfile_Ext . . . . . . . . . . . . . . . . . . . . 104
Messagefile_Ext . . . . . . . . . . . . . . . . . . . 104
Help System Parameters . . . . . . . . . . . . . . . . . . 105
Autohelp_Screen . . . . . . . . . . . . . . . . . . . 105
Maxerrors . . . . . . . . . . . . . . . . . . . . . . 105
Auto_Help_Set . . . . . . . . . . . . . . . . . . . . 105
Code_Help_Field . . . . . . . . . . . . . . . . . . . 105
Code_Help_Format . . . . . . . . . . . . . . . . . . . 105
Beep Parameters . . . . . . . . . . . . . . . . . . . . . . 106
Beep_Off . . . . . . . . . . . . . . . . . . . . . . . 106
Beep_Time . . . . . . . . . . . . . . . . . . . . . . 106
Beep_Frequency_1 . . . . . . . . . . . . . . . . . . . 106
Beep_Frequency_2 . . . . . . . . . . . . . . . . . . . 106
Message Display . . . . . . . . . . . . . . . . . . . . . . 107
Input_Msg_Set . . . . . . . . . . . . . . . . . . . . 107
Error_Msg_Set . . . . . . . . . . . . . . . . . . . . 107
Field Attributes . . . . . . . . . . . . . . . . . . . . . 108
Blink_Count . . . . . . . . . . . . . . . . . . . . . 108
Timer_Intervall . . . . . . . . . . . . . . . . . . . 108
Mark_Field_Left . . . . . . . . . . . . . . . . . . . 108
Mark_Field_Right . . . . . . . . . . . . . . . . . . . 108
Key Specifications . . . . . . . . . . . . . . . . . . . . 109
Code_Cancel_Act . . . . . . . . . . . . . . . . . . . 109
Code_Abort . . . . . . . . . . . . . . . . . . . . . . 109
Code_Escape . . . . . . . . . . . . . . . . . . . . . 109
Performing 'Edit' functions . . . . . . . . . . . . . . . . 110
Function Keys . . . . . . . . . . . . . . . . . . . . . . . 110
Nationalisation Parameters . . . . . . . . . . . . . . . . 111
Code_Yes . . . . . . . . . . . . . . . . . . . . . . . 111
Code_No . . . . . . . . . . . . . . . . . . . . . . . 111
Character sets for Variables . . . . . . . . . . . . . . . 111
Country Information Parameters . . . . . . . . . . . . . . 112
SCL_Country . . . . . . . . . . . . . . . . . . . . . 112
Country . . . . . . . . . . . . . . . . . . . . . . . 112
Date_Format . . . . . . . . . . . . . . . . . . . . . 112
Date_Separator . . . . . . . . . . . . . . . . . . . . 112
Time_Separator . . . . . . . . . . . . . . . . . . . . 113
Currency . . . . . . . . . . . . . . . . . . . . . . . 113
SCL Control Parameters . . . . . . . . . . . . . . . . . . 114
Introduction page 7 Introduction page 7
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Progpath . . . . . . . . . . . . . . . . . . . . . . . 114
No_Wrap . . . . . . . . . . . . . . . . . . . . . . . 114
Format Pointers . . . . . . . . . . . . . . . . . . . . . . 115
S_Ptr . . . . . . . . . . . . . . . . . . . . . . . . 115
R_Ptr . . . . . . . . . . . . . . . . . . . . . . . . 115
W_Ptr . . . . . . . . . . . . . . . . . . . . . . . . 116
Format Handling Parameters . . . . . . . . . . . . . . . . 117
Active_Field . . . . . . . . . . . . . . . . . . . . . 117
Char_Code . . . . . . . . . . . . . . . . . . . . . . 117
Glb_Error . . . . . . . . . . . . . . . . . . . . . . 117
Format Handling Parameters . . . . . . . . . . . . . . . . 118
User_Function . . . . . . . . . . . . . . . . . . . . 118
Begin_Of_Field . . . . . . . . . . . . . . . . . . . . 118
End_Of_Field . . . . . . . . . . . . . . . . . . . . . 118
End_Of_Format . . . . . . . . . . . . . . . . . . . . 119
Checkrequired . . . . . . . . . . . . . . . . . . . . 119
Screen related Parameters . . . . . . . . . . . . . . . . . 120
Screen_Mode . . . . . . . . . . . . . . . . . . . . . 120
Mono_Adapter . . . . . . . . . . . . . . . . . . . . . 120
Color_True . . . . . . . . . . . . . . . . . . . . . . 120
Format related Parameters . . . . . . . . . . . . . . . . . 121
Xoff . . . . . . . . . . . . . . . . . . . . . . . . . 121
Yoff . . . . . . . . . . . . . . . . . . . . . . . . . 121
Background Processing Parameters . . . . . . . . . . . . . 122
LP_Background_Pointer . . . . . . . . . . . . . . . . 122
HP_Background_Pointer . . . . . . . . . . . . . . . . 122
Miscellaneous Parameters . . . . . . . . . . . . . . . . . 123
Glb_Status . . . . . . . . . . . . . . . . . . . . . . 123
Glb_Ok . . . . . . . . . . . . . . . . . . . . . . . . 123
Format_Aborted . . . . . . . . . . . . . . . . . . . . 123
Global Type Declarations . . . . . . . . . . . . . . . . . 124
Procedures and Functions . . . . . . . . . . . . . . . . . . . . 125
Introduction . . . . . . . . . . . . . . . . . . . . . . . 125
Entering and leaving SCL . . . . . . . . . . . . . . . . . 126
Structure of a SCL Program . . . . . . . . . . . . . . . . 127
Loading and displaying formats . . . . . . . . . . . . . . 128
X_Max and Y_Max . . . . . . . . . . . . . . . . . . . . . . 130
Handling format input . . . . . . . . . . . . . . . . . . . 131
Format Handling Control . . . . . . . . . . . . . . . . . . 133
Reading/Writting Format Fields . . . . . . . . . . . . . . 134
Introduction . . . . . . . . . . . . . . . . . . . . . 134
Reading Field Content . . . . . . . . . . . . . . . . 135
Writing Field Content . . . . . . . . . . . . . . . . 137
Deleting Field Content . . . . . . . . . . . . . . . . 138
Reading the 'Selected' Attribute . . . . . . . . . . . 139
Writing the 'Selected' Attribute . . . . . . . . . . . 140
String Handling routines . . . . . . . . . . . . . . . . . 141
System Functions . . . . . . . . . . . . . . . . . . . . . 145
Date related routines . . . . . . . . . . . . . . . . . . . 147
Time related Routines . . . . . . . . . . . . . . . . . . . 149
Introduction page 8 Introduction page 8
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Background Processing Tasks . . . . . . . . . . . . . . . . 150
Other Routines . . . . . . . . . . . . . . . . . . . . . . 151
Chapter IV Chapter IV . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Data Communications Subsystem . . . . . . . . . . . . . . . . . 155
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Global Communications Parameters . . . . . . . . . . . . . 157
Timers and Delays . . . . . . . . . . . . . . . . . . . . . 158
Data Communications Control Characters . . . . . . . . . . 159
Other Declarations . . . . . . . . . . . . . . . . . . . . 160
Procedures and Functions . . . . . . . . . . . . . . . . . . . . 162
Initializing and Terminating DC . . . . . . . . . . . . . . 163
Sending Data . . . . . . . . . . . . . . . . . . . . . . . 164
Receiving Data . . . . . . . . . . . . . . . . . . . . . . 166
Other Functions . . . . . . . . . . . . . . . . . . . . . . 167
Low Level Routines . . . . . . . . . . . . . . . . . . . . 168
Example Programs . . . . . . . . . . . . . . . . . . . . . . . . 170
A Simple Line Monitor (SAMPLE7.PAS) . . . . . . . . . . . . 171
Listing of SAMPLE7.PAS . . . . . . . . . . . . . . . . 172
Description of SAMPLE7.PAS . . . . . . . . . . . . . . 177
A Terminal Emulator Program (SAMPLE 8) . . . . . . . . . . 179
Listing of Example Program 8 . . . . . . . . . . . . . 180
Description of SAMPLE8.PAS . . . . . . . . . . . . . . 187
Program Discussion . . . . . . . . . . . . . . . . . . . . . . . 190
Introduction . . . . . . . . . . . . . . . . . . . . . . . 191
Example 1 (OASIS Easy Fields) . . . . . . . . . . . . . . 192
Explanations of SAMPLE1.PAS . . . . . . . . . . . . . 193
Example 2 (OASIS Print Labels) . . . . . . . . . . . . . . 195
Explanations of SAMPLE2.PAS . . . . . . . . . . . . . 196
Example 3 (OASIS Formats Stack) . . . . . . . . . . . . 200
Listing of SAMPLE3.PAS . . . . . . . . . . . . . . . . 201
Explanations of SAMPLE3.PAS . . . . . . . . . . . . . 202
Example 4 (OASIS Automatic Disk Menu) . . . . . . . . . . 204
Example 5 (OASIS SCL Demo) . . . . . . . . . . . . . . . . 208
Menu . . . . . . . . . . . . . . . . . . . . . . . . . 208
Country Demo . . . . . . . . . . . . . . . . . . . . . 209
Date Demo . . . . . . . . . . . . . . . . . . . . . . 211
Special Fields Demo . . . . . . . . . . . . . . . . . 213
SCL System Details . . . . . . . . . . . . . . . . . . . . . . . 216
Service Routines . . . . . . . . . . . . . . . . . . . . . 217
Background Processing Tasks . . . . . . . . . . . . . . . . 219
READING AND WRITING FIELDS . . . . . . . . . . . . . . . . 222
SCL Input Character Processing . . . . . . . . . . . . . . 224
The Error Message File . . . . . . . . . . . . . . . . . . 225
SCL - System Resource Considerations . . . . . . . . . . . 226
Disk Access . . . . . . . . . . . . . . . . . . . . . 226
Processor Requirements . . . . . . . . . . . . . . . . 226
Format File -Disk Space Requirements . . . . . . . . . 226
Introduction page 9 Introduction page 9
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Code Space Requirements . . . . . . . . . . . . . 226
SCL Data Space Requirements . . . . . . . . . . . . . 226
Total Memory Requirements . . . . . . . . . . . . . . 227
Tips & Tricks . . . . . . . . . . . . . . . . . . . . . . . . . 228
Entry of Characters not normally accessible via the
Keyboard . . . . . . . . . . . . . . . . . . . . . . . 228
Blinking Fields . . . . . . . . . . . . . . . . . . . . . . 228
Use of the 'Intensity' field attribute on Color systems . . 228
The 'Selected' Attribute in Menus . . . . . . . . . . . . . 228
Preventing automatic termination of a format . . . . . . . 229
Highlighting text on screen formats . . . . . . . . . . . . 229
Special Fields . . . . . . . . . . . . . . . . . . . . . . 229
Storing strings in <Name>.ERR . . . . . . . . . . . . . . . 229
Using Field Input Messages for Help Screens . . . . . . . . 230
Using 'Goto_Field' . . . . . . . . . . . . . . . . . . . . 231
Alphabethic List of all User accessible SCL Procedures &
Functions . . . . . . . . . . . . . . . . . . . . . . . . . 234
Datacom Control Characters . . . . . . . . . . . . . . . . . . . 237
Field Attributes and Colors . . . . . . . . . . . . . . . . . . 238
Possible Field Attributes . . . . . . . . . . . . . . . . . 238
Colors . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Functions in SCL Programs . . . . . . . . . . . . . . . . . . . 239
Standard SCL Error Messages . . . . . . . . . . . . . . . . . . 240
The Shareware Idea . . . . . . . . . . . . . . . . . . . . 241
OASIS Products & Licencing Terms . . . . . . . . . . . . . . . . 242
OASIS Demo package . . . . . . . . . . . . . . . . . . . . 242
OASIS Evaluation . . . . . . . . . . . . . . . . . . . . . 243
OASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Invoice & Order Form . . . . . . . . . . . . . . . . . . . . . . 247
Order Form . . . . . . . . . . . . . . . . . . . . . . . . 247
Invoice . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Introduction page 10 Introduction page 10
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Introduction page 11 Introduction page 11
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Introduction Introduction ____________
What is OASIS? What is OASIS?
OASIS stands for Open Architecture Screen Interface System.
OASIS is a fourth generation programming tool to develop screen based
application programs and User Interfaces on Micro Computers. No one
can deny that computers still primarily rely on visual and tactile
means of communication to interact with its users. With the
proliferation of microcomputers in recent years, as more and more
people became users they consequently behaved as consumers who
implicitly stressed the emphasis on human interfacing, as a result
products offered more and more ergonomic features. Among the top
features speed is definitely high on the list. Obviously the first
and most tangible advantage of fast applications is an overall gain
of time to complete a given project, however this is certainly not
the most important one. What matters more is the response time, in
other words the time it takes for the application to process
elementary tasks which if not carefully timed induce unnecessary and
undesirable delays. Neglecting this factor, no matter how small or
hardly perceptible delays can be, invariably results in operator's
irritations that may in some cases lead to reject the product.
Otherwise what the user wants is in essence a tool easy to use, quick
to learn with sufficient help information readily available on line,
flexible but logical and powerful, in other word something
comfortable and easy on the eyes that meet his expectations.
On the other side of the fence we have the programer who is tasked to
satisfy all these requirements while focussing on performance thus
making the product attractive and marketable within a tight schedule
in order to be one of the first in this competitive marketplace.
This is precisely where OASIS come into play to serve the interests
of all parties. OASIS is an immensely powerful tool for the
programmer because it allows him to cut down development time while
ensuring outstanding human interface features and still focus on the
intrinsic part of the application thus optimizing its resources and
performances. How OASIS achieves this is described in the product
overview. To illustrate what has just been is said here you ought to
know that OASIS and more specifically SFD (Screen File Designer)
itself has been designed using the semantics that governs SCL (Screen
Control Language) itself and for that reason is indeed an application
of itself, in other words SFD was designed using SFD, a sort of CATCH
22 scenario.
To sum up this brief introduction one could say that OASIS is to the
DESIGN AND MANAGEMENT OF USER INTERFACE what the advent of
wordprocessors in the mid 1970's has done to TEXT WRITING AND
EDITING.
Introduction page 12 Introduction page 12
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
About this manual About this manual _________________
This manual describes OASIS and its various components and how to use
them. This book articulates itself around three chapters followed by
one appendix.
CHAPTER I System Overview CHAPTER I System Overview
The purpose of this chapter is to arouse the interest of the
reader by describing OASIS main components and listing their
features.
CHAPTER II Screen File Designer (SFD) CHAPTER II Screen File Designer (SFD)
After a short introduction to SFD you will be paced through a
comprehensive tutorial followed by a chapter providing a
functional description of SFD.
CHAPTER III Screen Control Language (SCL) CHAPTER III Screen Control Language (SCL)
This chapter discusses in details the major procedures and
functions that constitute the heart of the system.
CHAPTER IV SCL Data Communication subsystem CHAPTER IV SCL Data Communication subsystem
Since OASIS can be used in a micro to mainframe environment
this chapter is entirely dedicated to the DataCommunication
extensions of SCL.
APPENDIX A APPENDIX A
This chapter covers several advanced OASIS features and also
contains descriptions and discussions of 5 sample programs.
APPENDIX B APPENDIX B
Lists and Tables.
OASIS products & Licencing Terms.
Introduction page 13 Introduction page 13
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
What this manual assumes What this manual assumes ________________________
In order to fully exploit the Secret of SCL the reader is expected to
have some experience with programming languages and especially TURBO
PASCAL. We assume that the reader can refer to BORLAND manuals and
references in order to write SCL programs, compile, debug and run
them.
What you will learn What you will learn ___________________
The best method to learn something new is to practice, make mistakes
and learn from them. From the very beginning, you will have at the
tip of your fingers all the power and the flexibility of the Screen
Format Designer SFD, you will soon realize how intuitive it can be
and it won't take long before you become familiarized with all the
keyboard functions and the system features.
The tutorial in chapter II will pace you step by step in the design
of a trivial screen letting you exercise almost every function of
SFD. Within a couple of hours you will be able to design and test
fully fledged screens.
Chapter III provides you with the basic architecture to elaborate
complex programs including multiple stacked screens (windows) and
background processing tasks.
Chapter IV will let you include data communication routines to deal
with the outside world. Finally a set of programming tips is
available in Appendix A to the expert to fine tune complex
applications to a breathtaking level.
We hope that you will very shortly be able to unleash the full power
of OASIS to your benefit, your limits being your own imagination.
Good luck and have a good time.
Introduction page 14 Introduction page 14
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
This Page is intentionally left blank
Introduction page 15 Introduction page 15
Chapter I Chapter I
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Open Architecture Open Architecture
Screen Interface System Screen Interface System
( OASIS ) ( OASIS )
System Overview and Features System Overview and Features
Chapter I, System Overview and Features page 17 Chapter I, System Overview and Features page 17
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Overview Overview ________
OASIS allows you to create and handle state-of-the-art screen OASIS
interfaces with many outstanding features in a most comfortable and
efficient way. Due to its background processing capabilities the
handling of datacom and so on can also be easily achieved. OASIS is OASIS
not an application generator. Typically, application generators
require some kind of a macro language which is usually rather limited
in terms of flexibility. This often results in slow running, clumsy
applications a too high price to be paid for added programming
convenience.
Instead, OASIS is built on top of Turbo Pascal, leaving all features OASIS
of this powerful development system available to you for special
requirements OASIS may not be capable to fulfill. OASIS
With OASIS you can OASIS
* Add Micro based front ends to existing mainframe programs,
taking over anything from Screen Management up to local data
storage etc.
* Build the Micro part of distributed processing applications.
* Write completely Micro based Applications utilizing virtually
any number of screen formats.
* Develop sophisticated Terminal Emulators.
OASIS is a sophisticated and powerful user interface design and OASIS
management system that both simplifies the task of the application
writer and provides a very attractive interface to the end user.
Using OASIS not only results in tremendeous time savings (depending OASIS
on the kind of application between 50 and 90 percent) but also
achieves perfect results.
Chapter I, System Overview and Features page 18 Chapter I, System Overview and Features page 18
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
OASIS has two main components: OASIS has two main components:
The Screen Format Designer (SFD) The Screen Format Designer (SFD)
The Screen Control Language (SCL) The Screen Control Language (SCL)
Screen Format Designer (SFD) Screen Format Designer (SFD)
SFD is an integrated application program, itself written with OASIS, SFD OASIS
introducing a new concept in the elaboration of screen formats. It
allows the user to interactively design any screen format layouts on
the principle of what you paint is what you get. Away from the host
application SFD lets you define all field parameters of the format
plus a large suite of other refinements such as related error
messages and help screens. Futhermore SFD enable you to dynamically ___________
test new formats before you even wrote a single line of code. ____
Screen Control Language (SCL) Screen Control Language (SCL)
SCL is a extensive collection of Turbo Pascal Source Routines built SCL
to cater for all aspects of format access, display, window
management, data capture, input check, display of error messages,
help system. By simply including these routines in any Turbo Pascal
Program, all of its features can be used just like a very high level,
straightforward and easy to learn language extension to Turbo Pascal.
This not only leaves all flexibility to the programmer, but enables
him to create highly professional applications with many outstanding
features in a fraction of the time usually required, which
contributes to reducing development costs considerably.
Chapter I, System Overview and Features page 19 Chapter I, System Overview and Features page 19
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Screen Format Designer (SFD) The Screen Format Designer (SFD) ________________________________
The purpose of this program is to assist you to design, specify and
test all screen formats to be incorporated in an application program.
These formats are 'built' in a straightforward but comprehensive
approach using a full screen editor for the format layout and a
series of pop-up menus to define field and global parameters. Finally
under each single format name are stored not only the form
description layout and its field definitions but any information
related to that format such as reference to help screens.
Key features of SFD include : Key features of SFD include :
- Easy to understand, Menu Driven Program with Windows.
- Online accessible, context sensitive Help facility.
- Layout design with comfortable Full Screen editor.
- Full characterset access.
- Drawing of Boxes with the opportunity to choose any linestyles
and automatic interconnections to other boxes.
- Powerful Block Copy and Delete functions.
- Outstanding selection of display attributes and
highlightfunctions, seperate for color and monochrome displays.
- A large range of pre-defined fieldtypes.
- Input validation selectable for any field.
- Up to 50 fields per format.
- Option to define and link 'Help' formats and assistance
messages to any single field.
- Unrestricted formats size up to 80 x 25.
- Number of formats per program only limited by disk space.
- Transfer of formats between different format files.
- Printing of format lists and hard copies.
- Complete inbuilt test facility for new formats.
- Dynamic alteration of format specs. and attributes during test
with results immediately being visible.
- Full support of MSDOS 2+ Subdirectory structure.
Chapter I, System Overview and Features page 20 Chapter I, System Overview and Features page 20
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Screen Control Language (SCL) The Screen Control Language (SCL) _________________________________
SCL is an extensive set of routines to access SFD generated format SCL SFD
files and to perform all screen related functions within a Turbo
Pascal program.
The main features of SCL are: The main features of SCL are:
- Powerful command syntax (Processing of a complete format
including input check and error handling with only three
statements).
- Automatic control of display and overlay of formats.
- Easy and comfortable access to fields.
- Support of windows including stacking to any desired depth, only
limited by the amount of memory available.
- Handling of menus, even multiple menus and/or together with data
input fields on one format.
- Full control of display attributes and formatting of fields.
- Automatic input validity checks and display of error messages.
- No requirement to declare field variables etc. in your program.
- User programmed checks or other interferences possible anytime
made simple and safe.
- Capability to monitor and flag user selectable keyboard keys and
other events.
- Changes to Formats, Messages and Input check parameters are
possible without recompiling the program.
- Highly improved conciseness and ease of understanding of
finished programs.
- Comprehensive library of procedures and functions to facilitate
date/time processing, access to DOS functions, string handling,
(data communication with full reease) and much more.
- Support of execution of other programs and even DOS commands
from within an application.
- Support of background processing tasks (datacom, printing etc).
Chapter I, System Overview and Features page 21 Chapter I, System Overview and Features page 21
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Application programs written with OASIS. Application programs written with OASIS. ________________________________________
The use of OASIS results in very ergonomic application programs with The use of OASIS
outstanding handling capabilities and many userfriendly features
like:
- Automatic display of assisting messages for each single field.
- Extensive Online Help System with four different, user
selectable levels.
- Automatic Input error handling and display of error messages.
- Adaptability to different systems/keyboard layouts.
- Simple and straightforward Nationalisation and Customisation.
- Full Support for both Color and Monochrome displays.
- Undo function.
- Abort function.
- Mouse support very simple to accomplish.
- Interrupt driven Data Communications Handling
Chapter I, System Overview and Features page 22 Chapter I, System Overview and Features page 22
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Some Feature Explanations. Some Feature Explanations. __________________________
Screen Related Program Parameters Screen Related Program Parameters
In OASIS written application programs most screen related parameters OASIS
are stored in data files. This includes the format layouts
themselves, the field details, error messages, help and explanatory
information, field input check/validation parameters, colors,
attributes and much more.
All these parameters can be altered anytime using SFD. SFD
This presents several advantages:
1. Program changes are often possible without recompiling.
2. Nationalisation and customisation of programs, otherwise often
very tedious and time consuming tasks become effortless and easy
to accomplish.
3. The program sources are more compact, easier to understand and
do compile faster.
Colors and Display Attributes Colors and Display Attributes
OASIS written applications automatically recognize the type of OASIS
display adapter and therefore utilize the suitable screen attributes.
For optimum result, two totally independent sets of attributes are
provided for each format/field, one for color graphic and one for
monochrome display adapters.
Note: OASIS works in 80 column modes only. Note:
Non Standard Keyboard Layouts Non Standard Keyboard Layouts
SCL written applications can easily be adapted to non standard SCL
Keyboards. The Codes of all relevant keys are stored as constants and
can be adapted as required.
Chapter I, System Overview and Features page 23 Chapter I, System Overview and Features page 23
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Program development with OASIS Program development with OASIS ______________________________
It is made up of two distinct phases.
A. Declarative Phase A. Declarative Phase
This Phase is completely performed using SFD. It consists of the SFD
following steps:
1. Define all screen formats and fields required.
For each Format do the following:
2. Using the screen editor, design its layout including location
and size of all required fields.
3. Using pop-up menus then specify the appearance of the format,
define whether special checks are required or not for this
format and establish if and when other external actions are to
be performed.
4. Always using pop-up menus determine if and in which fields
error and explanatory messages are to be displayed.
5. Again using pop-up menus specify for each field, the type
(Variable, Constant, Output) and define its parameters like
special appearance, attributes, formatting, necessary checks,
explanatory message,inter field dependencies and so on.
6. Finally test the format using the SFD test facilities. The SFD
format behaves just as if it was already integrated in your
program. You can therefore safely test input checks,
formatting, help system and many other things. You may find
that you are not satisfied with one or another detail. No
problem, you can do most changes right away, without even
leaving the test. The results will be immediately visible to
you. Only for some major changes like basic layout or field
types you would have to go back to the Design facility.
7. Once you are pleased with your format, you can assign help
screens to it (this can be done anytime later on). There are
many different possibilities for the help system, please look
under "The OASIS Help System" for details. "The OASIS Help System"
Chapter I, System Overview and Features page 24 Chapter I, System Overview and Features page 24
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
B. Procedural Phase B. Procedural Phase
1. Now the time has come to actually begin programming using SCL SCL
constructs.
The first approach is to build some sort of skeleton program,
containing all switching logic between different formats and so
forth.
2. You then compile this skeleton and experiment with the basic
logic to assess its functionality and see if it is what you
wanted initially. By now, you will have an exact idea how the
final program will look like and you already have spared
yourself precious time since you will require a lot less testing
and changes later on.
3. You complete your program by adding all the missing logic into
the skeleton.
4. You perform the final testing and fine tuning as required.
Chapter I, System Overview and Features page 25 Chapter I, System Overview and Features page 25
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Differences to traditional program development Differences to traditional program development ______________________________________________
What instead of how What instead of how
Obviously the first difference with conventional user interface
approach is that you do not have to specify how your formats are to
be built. As a matter of fact this is the essence of the OASIS
concept. All you have to do is draw them and tell SFD what they
should look like. It is no longer neccessary to write procedures to
check or to format the fields content.
As a general rule, just declare what should be done, not how to do ____ ___
it.
Early Tests Early Tests
Most of the necessary test work can be performed at quite an early
stage of the program development, ensuring that conceptual errors are
detected early enough to take corrective actions before things get
out of control.
Less Programming Less Programming
Another strength resides in the fact that much of the programming is
already done before you even start to generate a program source. Once
you really start programming, you will realize that SCL constructs SCL
allow you to remain in the declarative mode. Since you don't have to declarative
develop procedures, you can concentrate on more global aspects of
your program and, as a side effect, you'll save a considerable amount
of time.
Easier changes Easier changes
During program development a lot of changes have to be made to the
program. Even once a program is finished, you usually never really
stop changing it. For programs written with OASIS this becomes a lot OASIS
easier. If the changes are in the screen interface, you can usually
perform them via SFD without even recompiling the program. Even if SFD
this is not the case, it becomes a lot easier to do since your
program source is much more concise and thus more intelligible.
Nationalization, customization made simple Nationalization, customization made simple
All screen formats and all program messages are stored in data files,
easily accessible with SFD. Customisation of screens and/or messages SFD
or even translation of a whole program into other languages become
mondaine tasks, without even recompiling the program.
Chapter I, System Overview and Features page 26 Chapter I, System Overview and Features page 26
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
System Installation and Setup System Installation and Setup _____________________________
The Distribution Disks The Distribution Disks
On the OASIS Distribution disks you'll find the following files: On the OASIS Distribution disks you'll find the following files:
READ.ME Textfile containing last minute information.
SCL.TPU Turbo Pascal 4.0 Unit file containing all Screen Screen
Control Language (SCL) Routines and definitions. Control Language
In order to access SCL you must include 'SCL' in
your 'USES' statement.
SCL.DOC Source of the 'Interface' Part of SCL.TPU.
SFD.EXE Screen Format Designer Program.
SFD.ERR Text file containing error messages for SFD.EXE.
SFD.MSG Data file containing explanatory program messages
for SFD.EXE.
SFD.FOR Screenfile for SFD.EXE.
SFD.FIN Screen index file.
SCL.ERR Optional (Error-) Message file to be used for your
programs. You can add your own messages as required.
SAMPLExS Turbo Pascal program examples to demonstrate SCL.
SAMPLEx.EXE Compiled versions of the above.
SAMPLEx.SCS Screenfiles to above.
SAMPLEx.SCI Indexfiles to above.
SAMPLEx.MSG Message files to above.
SAMPLEx.ERR Error messages to above.
Chapter I, System Overview and Features page 27 Chapter I, System Overview and Features page 27
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
System Requirements System Requirements
IBM PC or compatible
256 KB Memory minimum
Hard disk *)
PC DOS/MS-DOS 2.0 or later
Turbo Pascal 4.0 or later
*) Note: Note
The Screen Format Designer program requires a hard disk in order to Screen Format Designer
run.
Other typical Application Programs build with OASIS normally run OASIS
happily on a floppy system.
See Appendix A for Details on System Resource Considerations. See Appendix A for Details on System Resource Considerations.
Chapter I, System Overview and Features page 28 Chapter I, System Overview and Features page 28
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Installation Instructions Installation Instructions _________________________
There is no special Installation procedure necessary since OASIS is
not copy protected.
Just create a subdirectory on your hard disk and copy the content of
both distribution disks to it.
Now add to your CONFIG.SYS file the following two statements:
FILES=16 FILES=16
BUFFERS=32 BUFFERS=32
If your configuration file should already contain a "FILES=nn"
statement, then you just increase the number to at least 16; if it is
already bigger, leave it as it is.
The same applies to the "BUFFER=nn" Statement.
This completes the installation.
To start the Screen Design Program just go to the subdirectory you've
loaded the distribution disks to (using the DOS Command "CD") and
enter SFD<Return>. SFD
Chapter I, System Overview and Features page 29 Chapter I, System Overview and Features page 29
Chapter II Chapter II
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Chapter II, SFD getting started page 31 Chapter II, SFD getting started page 31
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Screen Format Designer The Screen Format Designer
( S F D ) ( S F D )
Getting Started Getting Started
(A Short Tutorial) (A Short Tutorial)
Chapter II, SFD getting started page 32 Chapter II, SFD getting started page 32
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Explanation of keyboard functions Explanation of keyboard functions
At first you will probably find the following explanations rather
complicated and confusing, but upon trying you will soon find that
everything does function in a very intuitive way and you will very
quickly get familiar with it. Much care has been taken regarding the
way the different functions are layed out to achieve ease of
operation and a maximum of ergonomy.
Variables and Constants Variables and Constants
Variables and Constants are the two main categories of format fields.
Whenever you happen to see the cusor, either as a blinking underline
character or as a big block (which may or may not blink) you are in a
Variable field and you are expected to enter some data. Variable
If the cursor is not visible you are in a Constant field. You can't Constant
enter any data into Constants, all you can do is to select or
deselect them by pressing Return or Enter. A typical example for Return Enter.
Constant fields is a Menu. You just select one (in some cases more Constant
than one) possibility out of a choice being presented to you.
The keys to travel between fields and their functions are as follows: The keys to travel between fields and their functions are as follows:
Right : Next Field.
Left : Previous Field.
Down : First field on next line.
Up : Last field on previous line.
Home : First field in line.
End : Last field in line.
PgDn : Last field on format.
PgUp : First field on format.
Tab : Next field.*)
ShiftTab : Previous field.*)
Note: Note:
*) Tab and Right respectively ShiftTab and Left are not identical.
See next paragraph.
Chapter II, SFD getting started page 33 Chapter II, SFD getting started page 33
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Variable field specials Variable field specials
Upon approaching a Variable field you will realize several things
happening.
1. The present content of the field (if there is any) is being
shifted to the left, no matter how it was formatted before. this
is done in order to facilitate the entry or change of data.
2. In some cases, the part of the field not yet containing data is
flushed with Fill characters (usually dots) or the whole field Fill
is being underlined. Whichever the case, the intention is to
give you an indication of the length of the field, i.e. how much
space is left for data input.
3. The Cursor is visible in form of a blinking Underline character.
Once you start entering data, the shape of the cursor changes to a
big block which may or may not blink. This indicates that you are now
in Entry mode and that the left and right arrows have changed their Entry
meaning. Now Right advances you one character position and Left moves Right Left
you to the previous character. Note that Tab and ShiftTab keep their Tab ShiftTab
original functions. If you press Right while already being in the Right
rightmost position of the field or if you press Left while being at Left
the first character of the field you will be notified by a Beep. Beep.
Besides just entering data, there is an alternate method to change
from Travel to Entry mode : Pressing Return. This is especially handy Travel Entry Return
in cases where you want to change already existing data in a field
and you need to advance to the appropriate character position(s)
using the arrows. arrows
Editing keys Editing keys
Backspace : Deletes character left of cursor.
Insert : Inserts a space at cursor position.
Delete : Deletes character under cursor.
Note: Entering data into the rightmost position of a Variable Note: Variable
automatically advances you to the next field.
Chapter II, SFD getting started page 34 Chapter II, SFD getting started page 34
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Return Return
As previously mentioned, pressing Return while in a Variable field Return Variable
puts you into Entry Mode. Once you are in Entry mode pressing Return Entry Entry Return
finishes this field an advances you to to the next one or, if this
field was the last one, terminates the format.
The resulting effect on the field content varies depending on your
position within the field.
If you were in the first position, the entire current field content
is captured. For all other positions only the portion of the field
left of the cursor is recognized.
While in a Constant field, pressing Return toggles the status of the Constant Return
field from not selected to selected and vice versa. The cursor will not selected selected
automatically be advanced to the next field. In case you are already
in the last field the format will be terminatedn
In some cases, Constant fields can form a group, typically some kind Constant
of a menu. In these cases only one field out of that group may be
selected at any given time. So, if you select a field other than the
one presently already selected, the latter one will automatically be
deselected. If a field of such a group has been selected, the cursor
automatically advances to the field immediately following the group
(in case there is none left, the format will be automatically
terminated).
Selecting an item out of a group of Constant fields may or may not be Constant
mandatory. In case it is, you are not allowed to deselect a field deselect
(i.e. pressing Return in a field being presently selected results in Return selected
a Beep or an error message to be displayed). Beep
In such cases, deselecting a field is automatically done as soon as deselecting
you select another field. This is very much the same as on a TV-Set select
where you deselect a channel by just choosing another one.
Escape Escape
Escape can be used to tell the program independently of the cursor
position that you are finished with the present format and you want
to exit it.
Chapter II, SFD getting started page 35 Chapter II, SFD getting started page 35
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Function keys Function keys
F1 F1
Pressing F1 displays General Help Informations including key F1
functions etc.
F2 F2
F2 displays specific Informations relative to what you are presently
doing. Please note that F2 help is not available for every format. In F2 help
such cases, if you press F2 you will just hear a beep. F2 beep.
F3 F3
The UNDO key. Pressing F3 will restore the content of your present F3
field to whatever it was before you changed it; i.e. will UNDO your
changes. Note that UNDO only applies to Variable fields. Variable
F10 F10
The ABORT key. Pressing F10 tells the program that you want to F10
unconditionally abort your present operation. Any data you may have
entered on your present format will be lost. For this reason, Abort Abort
is only available with a few formats.
Formats where Abort is not available can typically only be exited by Abort
hitting the Escape key while the data fields are empty. Escape
Other (local) functions Other (local) functions
On some formats there may be further functions available. Pressing F1 F1
(Help) will always give you the appropriate details.
Chapter II, SFD getting started page 36 Chapter II, SFD getting started page 36
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Errors & Automatic Help System Errors & Automatic Help System ______________________________
Invalid data entry Invalid data entry
Whenever you try to enter invalid data you will be notified by a Beep Beep
and, in some cases, a system generated error message may be
displayedn
Missing mandatory data Missing mandatory data
If you attempt to exit a format before having entered all mandatory
fields, the program will notify you in the same way as in the case of
invalid data. In addition, the cursor will automatically be
positioned into the field where data is missing.
Autohelp feature Autohelp feature
If you make a certain number of consecutive input errors (Default =
3) the program will automatically come up with information where and
how to obtain help.
Note: You can change nearly all Help system Parameters according to Note:
your requirements.
See under 'System Defaults' for details.
Chapter II, SFD getting started page 37 Chapter II, SFD getting started page 37
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Design Cycle Design Cycle ____________
To make you familiar with the operation of SFD we will now go
together through the complete cycle of design and specification of a
format.
During this exercise we will also look at some of the features the
program offers. Once we are done with the design of your format we
will test it using SFD's own test facility.
Those already familiar with the basic operation of SFD can skip this Those already familiar with the basic operation of SFD can skip this
part of the manual. part of the manual.
Start the program by entering SFD<Return> (Make sure to be in the SFD
right directory).
After a short moment you will be presented with the programs main
menu.
It is divided into three parts.
The header shows the program name, version etc as well as some
informations about the directory you have selected, the workfile and
the number of formats in it.
Since you have just started up the program the following information
should be displayed.
Act dir : <The currently active drive and directory>.
Workfile : <None>.
Nr of Formats: 0.
The middle part of the menu is occupied by a number of menu items,
subdivided into seven groups.
Presently, the first item (Layout) of the first group (Design) should
be highlighted.
The last line of the menu is called Message Line and gives you a Message Line
brief explanation of the highlighted item.
If you press F1 (just do it !) a screen informing you about the F1
meaning of keys etc will appear.
To leave the Help format press either Return or Escape. Return Escape.
F2 will give you a bit more detailed Information about the presently F2
highlighted group of items on the menu. Again, to leave the help
format you must press Return or Escape. Return Escape.
You can use F1 on any format, F2 may not be available in some cases. F1 F2
Chapter II, SFD getting started page 38 Chapter II, SFD getting started page 38
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
You can travel around on the menu using the appropriate keys. If you
don't know which ones either look in this manual under 'Meaning of
keys' or press F5. While you are traveling around on the menu, watch F5
the message line changing.
| You may also want to press F2 while being in different fields and
read the appropriate explanations.
Once you are familiar with how to travel on a format, we can proceed
to some 'real' work.
| Before we start I want to remind you of the two 'Help' keys F1 and F2
During this exercise it is probably a good idea to use them very
frequently (Especially F2) and read the information they containn
| Don't forget that the help provided by F2 is context sensitive (i.e.
the kind of information provided may change depending where you
presently are on the format.
Should you require further detailed informations, then read the
appropriate chapter later on in this manual.
Chapter II, SFD getting started page 39 Chapter II, SFD getting started page 39
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Designing a format layout Designing a format layout _________________________
1. Travel to the appropriate item (Layout).
2. | Hit Return. This selects the item.
Since you have not yet loaded a work filel SFD will come up with a SFD
tiny window asking you for a name.
Enter a name (without extension since SFD uses its own extensions), SFD
| say 'Myfile', and press Return.
The window disappears again and a new one will come up informing you
that SFD will ask you whether you want to create a new format. You SFD
say yes.
Now you will be presented with the layout editor's worksheet (a fancy
name for an empty screen, isn't it ?).
It's size defaults to 25 lines with 80 characters each (a full
screen).
In order to familiarize you with the different features, you should | now read both the F1 and F2 help formats.
| You probably have already noticed some additional functions on F4 to
| F9 During our little exercise we will try out most of them.
However we should first talk about the other keys. Some have a
slightly different meaning as on a normal format.
Chapter II, SFD getting started page 40 Chapter II, SFD getting started page 40
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Layout editor - Meaning of keys Layout editor - Meaning of keys
| Backspace, Insert and Delete have the same meaning as under normal
operation.
| Home moves the cursor to the upper left corner of your
worksheet.
| End moves the cursor to the first position on the last
line.
| PgUp deletes the line under the cursor.
| PgDn inserts a line.
| Return moves the cursor to the first character of the next
line.
| The Arrow keys allow you to move freely on the format. Note that the
| Arrows are working in wrap-around mode. This means that:
| If you press Right while being in the rightmost position you will be
moved to the first position of the next line.
| If you press Left while being in the first position of a line you
will be moved to the last position of the previous line.
Right while being in the lower right corner moves you to the upper
| left corner; the opposite happens if you then press Left.
| Pressing Up while being in the first line moves you to the last line
| and the opposite happens with Down while in the last line.
Before starting to draw a format we will learn how to specify its
size. (The size can actually be changed anytime during the layout
design).
Chapter II, SFD getting started page 41 Chapter II, SFD getting started page 41
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Changing the Format Size Changing the Format Size
| Press F9. This will display the editors local menu. Select the first
item (Change format size). A new window comes up with the present
settings. Just enter new values, let's assume 15 lines with 40
characters each. That's it.
You'll now see that the unused portion of the screen is filled with
tiny dots. This is done to give you an idea of your drawing area.
You will also realize that cursor movement is now confined to this
area.
Now we will start drawing a screen format.
Chapter II, SFD getting started page 42 Chapter II, SFD getting started page 42
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Drawing fields Drawing fields
In our exercise we will build a format for a rather trivial program
to print address labels.
While drawing it make sure that you don't put any text into the first
character position on any line because we will need this space later
on.
First go to the second line and give the format a header of your own
| choice. Once you have written it go to column 1 and press Insert
until it is approximately in the center. (If you have moved it too
| far, use Delete)
Now go to line 4 and enter the following: [Mr][Mrs][Miss]
The open square bracket means 'Begin of field', the closed means 'End
of field'. In your example, the first character position of the first
field is the 'M', the last is the 'r'. the field has a length of two
characters.
Now complete your format according to the drawing below. Move
everything that it looks nice. The exact length and position of the
fields does not matter at the moment, just check that you have left
line 1, line 3, the line below 'City' and line 15 (the last) as well
as the first and last column empty. We will need them in a moment...
-Header-
[Mr][Mrs][Miss]
Name.......[ ]
Street.....[ ]
City.......[ ]
Number of Labels[ ]
Msg[ ]
Chapter II, SFD getting started page 43 Chapter II, SFD getting started page 43
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Drawing boxes Drawing boxes
Presently our format doesn't look too appealing, does it ? We will
correct this now by drawing boxes around the different parts.
First we want to draw a frame around the complete format. We need to
| Mark two diagonal corners of the box we want to draw. Therefore we go
| to line 1, Column 1 (Home) and press F5 (Mark). The mark is shown as
| a small rhombus. (By the way, an accidentally set Mark can easily be
| removed by positioning the cursor over it and pressing F5 again).
| To get to the other (lower right) corner we can now press Left twice.
| Again F5 to mark it.
| Now press F8 (Draw Box). Observe !. Observe !
| Incidently, key F7 does exactly the opposite of F8, i.e you can
| undraw (delete) a box with it.
The box drawing feature can also be used to draw vertical or
horizontal lines. Just place the two marks in either the same line or
the same column.
Apart from double lines as you have already seen, boxes can be drawn
in all kind of line styles which ca be seperately defined for
horizontal and vertical lines. To do this, go by the following
instructions.
Chapter II, SFD getting started page 44 Chapter II, SFD getting started page 44
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Selecting Linestyles Selecting Linestyles
We now want to seperate the different parts of the format. However we
would rather like to use single lines instead of double lines. In
order to achieve this you go to the local menu (F9) again and select
the second option (Box Linestyles) by highlighting it and pressing
| Return.
The small triangles you see on the format being presented to you
specify the currently selected linestyles (Double lines). Since we
want single lines for horizontal, highlight the second field and
| press Return. The vertical lines we leave as they are. Once back on
| your worksheet, go to Line 3, first column. Place a Mark.
| Go to the last position of the line below 'City'. Mark it as well.
(Actually you could also have marked the other two diagonal corners,
i.e. line 3, last column and the first column of the line below
'City').
| Press F8 to draw the box. As you can see, all necessary Junctions are
done automatically.
(For your information: This applies not only for 'T', but also for (For your information: This applies not only for 'T', but also for
'X' junctions, whenever you use single or double lines). 'X' junctions, whenever you use single or double lines).
By now, you should be reasonably satisfied with your format (don't be
too fancy after all, it is not that terribly sophisticated anyway)
and we will proceed to specify its parameters.
| To leave the editor, press Escape.
SFD will verify whether you really want to leave the editor, select SFD
'Yes'.
Note: The program is now checking your format. If for some reason Note:
you did not properly use the brackets (Field delimiters) a window
will be displayed informing you of the kind of error you made. In
| this case, hit Escape or Return to go back to the editor and correct
your piece of art before attempting to leave it again as described
above.
Chapter II, SFD getting started page 45 Chapter II, SFD getting started page 45
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Field specifications Field specifications
Now you should see your format (the field delimiters have been
removed) and a small menu offering four different choices.
We want to specify the fields of your format, so take the first one.
The menu vanishes and you are back in your address label format. It
now behaves like any other format you've seen so far. The first field
is highlighted and you can travel around using the familiar keys.
Before going further we should think a moment about your format and
what it should look like.
The first three fields (Mr,Mrs and Miss) should be a group of
options. There is no data to be entered into these fields , we just
want the user to select one (and only one) of the given options. Such
| fields are called Constants in SFD. To make the selection exclusive SFD
(only one may be selected) we must declare them as a group. And we
also want the selection to be mandatory.
To conclude.
1. We want fields 1 to 3 to be a group of selectable items
(Constants).
2. We want to declare them as mandatory.
Now let's do it.
Go to the first field (the 'Mr') and select it by pressing Return.
A window will come up giving you several options to preset the field
specifications. At present, your field is set to the default values,
meaning it is assumed to be a variable, any input is allowed, there
are no checks to be made and some more.
We don't want to preset it to anything else (all other fields are
currently declared in the same way), so we choose 'None'.
But we do want to change some of the specification details, so choose
'Yes'.
Chapter II, SFD getting started page 46 Chapter II, SFD getting started page 46
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Now the Field specification format comes up. The 'Type' still says
| Variable. We want to change it to Constant. Since the cursor is
| already in the 'Type' field just press Return. A small menu will come
| up. Choose 'Constant' and press Return again. That's it.
The next two fields show 'Group from 1 to 1'. Change the second '1'
| to '3' and press Return.
| Now you go to 'Mandatory' and hit Return to change it to 'Yes'.
Note: If you want to know the meaning of the other specifications, Note:
| just make use of your mighty F2 Help key.
At this point in time we could also specify the colors and
attributes, but for the time being we will leave them unaltered at
their default values and come back to them later on in this exercise.
| You can now press Escape to finish the format.
Since we have specified that field 1 is the first of a group ranging
from field 1 to field 3, SFD automatically copies it's specifications SFD
to the remaining fields of the group. There are however some
specifications which are not copied: The 'message', the delimiters
| and whether the field is Selected or not.
The next three fields (4 to 6) on your address label format are to be
| used to enter data, in other words, they are Variables. We want to
make input to them mandatory.
Call up the field specifications for the first one (Field Nr 4, the
'Name' field).
Go to the 'Fill' field. Enter a 'dot'. Into the 'Delimiter left'
field put a colon. (The colon will be displayed at the Position were
you put your open square bracket when you designed the layout). Set
'Mandatory' to 'Yes'. Now leave the format.
The next two fields on your format (street and city) should look the
same as the 'name' field. Consequently you can use the 'Preset'
function to copy the previous fields specs. As mentioned earlier, the
'Delimiters' are not copied, so, if you want to have a colon in front
of these fields as well, you must specify it (otherwise you can
choose the 'Details No' Option).
Chapter II, SFD getting started page 47 Chapter II, SFD getting started page 47
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
There are two fields left on your format, 'Nr of Copies' and 'Msg'.
'Nr of copies': Here again you can copy the specs from the previous
field. But go into the details as well since we want to specify some
input check parameters.
First of all, we only want Integer numbers (there is nothing like 2.4
labels). Hence go to the 'Inp.Check' field and press Return. Now make
your choice. We also want to limit the Number of address labels one
can obtain. We will assume a minimum of 1 and a maximum of 25 labels.
Enter the appropriate values and finish the format.
The 'Msg' field we want to use for error messages (If we don't
| specify a field for them we would just hear a Beep in case of
erroneous data input).
| Specify the type as Output only and also set 'Justify' to 'Center'
(just to make the messages look nice).
Leave the format.
| Since we now have specified all fields in your format, press Escape.
You are now back in the 'Change Format Specs' menu.
Chapter II, SFD getting started page 48 Chapter II, SFD getting started page 48
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Control Specifications Format Control Specifications
Select 'Format Control Specs'.
| Once the format is diplayed you probably best press F2 first and read
the infomations to get an idea.
Now let's begin. The first field we want to change is 'Error Message
Field'. Enter the number of your 'Msg' field, 8.
Actually, we are already finished with our specifications, but let's
| take the opportunity to talk about the User Function Key
specifications on the lower half of this format.
User Function Key Specifications User Function Key Specifications
The purpose of these specifications is to tell SCL later on in your SCL
program when to invoke special user written routines like additional
checks, prefilling of fields and many other things. By default, i.e.
without the need to be specified, facilities are provided by SCL to SCL
optionally invoke user written routines whenever a format field is
entered, left or if the format is exited.
In addition to this, SCL can be instructed to allow user written SCL
routines to take over control whenever certain keys are pressed. In
order to allow this to happen, the appropriate keys must be specified
| as User Functions.
SFD lets you specify any of the ten function keys and, in addition, SFD
| up to ten other keys to serve as User Functions. ('Key' in this
context can be any valid CNTRL or ALT key combination as well).
In addition to the here mentioned Interrupt specifications which are
valid throughout the whole format there is one more which can be
specified for each single field. You may have seen it already when
you did the field specifications. It is called 'CharCheck' and, if
set, can invoke a user written procedure at each single keystroke if
the cursor is in the appropriate field.
As you probably can imagine, the possibilities offered by the User
Interrupt System are enormous. Advice and examples on how to use them
are provided in A[[endix A.
Further informations can also be found in the SCL part of this SCL
manual.
Chapter II, SFD getting started page 49 Chapter II, SFD getting started page 49
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
We have now completed the format specification (colors and attributes
| will be discussed during the format test). Press Escape to go back to
the little 'Specifications' Menu and select 'End'.
Your format is now written to the format file on disk and you are
back in the Main Program Menu.
If you look at 'Nr of formats' in the header of the menu, you'll see
'1', indicating that you have created your first format.
If you want, you can print a hardcopy of it on your printer before we
continue to test it and try out the Color/Attribute specifications.
By now you should have a better understanding of some of SFD's SFD's
features and I hope that you have enjoyed our exercise so far.
When you are ready to continue, we will take a look at SFD's Format SFD
Test feature.
Chapter II, SFD getting started page 50 Chapter II, SFD getting started page 50
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Testing a Format Testing a Format ________________
| Select Design Test/Modify on the main menu. When asked for the name
of the format you want to test, enter 'Myformat' or whatever name you
called it. If you entered the wrong name, you will be notified by a
| Beep.
In this case, either correct it or, if you don't know the name
| anymore, press F10 to get back to the main menu and use the Display
| Formats option to find out the right one.
Anyway, as soon as you have entered the name of your format, press
| Return and it will be displayed.
It now behaves exactly according to your specifications. All input
checks are being performed and if you enter something wrong or forget
to enter mandatory data you will be notified. Take yourself a couple
of minutes to try out all kind of things like leave off mandatory
data, try to enter invalid data etc and watch the results.
Note: Handling of a format under 'Test' is a lot slower than later Note:
on in the program. This limitation is imposed by the fact that all
messages must be read from a disk file as opposed to later on in the
program where they are stored in memory.
Now let us modify the way it looks.
| To do this, you have to select the local menu (you know how, don't
you ?).
This menu offers the following choices:
Change field specs/Active field Change field specs/Active field
Allows you to change the specifications of the field in which you
currently are.
Change field specs/Other field Change field specs/Other field
This option enables you to change any other field on your format. It
is particularly useful to change fields you can't get at (Output only
fields).
Global Colors/Attributes Global Colors/Attributes
This option allows you to change the colors/attributes of all fields
of a kind (all variables, all constants or all output only fields) on
your format.
Format/Control Specs Format/Control Specs
The same as you have seen already during layout design.
Chapter II, SFD getting started page 51 Chapter II, SFD getting started page 51
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Colors/Attributes Colors/Attributes _________________
You now select 'Global Colors/Attributes'.
When asked for a field type, select 'Constant'. This means that you
want to change the appearance of all Constants in your format. In
your case these are the first three fields.
Before starting to do any modification, it is important to describe
| the meaning of Normal, Active and Selected fields.
| What determines if a field is displayed in Normal or Active status is
related to your position to this field, in other words, whether you
are 'in it' or not; i.e. it becomes active if you go there.
| Selected is mainly utilized for Constants (nevertheless it can be
useful with other fieldtypes as well for certain effects, see
| Appendix A under 'Advanced Programming Technics'). Selected is a
boolean status proprietary to a field. In the case of a Constant
field it can be toggled by pressing Return while being in the field.
To express the above states, field attributes, seperate for
monochrome and color screens, can be choose as required.
Field Attributes Field Attributes
On monochrome displays, some of the field attributes like 'underline'
| and 'Inverted' are exclusive. Since Selected can come together with
| both Normal and Active field status, it is your responsibility to
make sure that the attributes don't exclude each other. As an
| example, if you would specify 'Selected' as being inverted and Active
as being underlined the appearance of the appropriate field wouldn't
change whether you were in the field or not, it would just being
inverted in both cases. This could be very irritatating since you
might not be able to recognize what field you were in.
In the case of 'Color' attributes the same is true for example if you
| choose an 'intensified' color for selected and the 'Intens' attribute
| for Active.
If you have a monochrome adapter, you can't see the results of any
changes made to the 'Color' attributes and vice versa. Nevertheless,
you should at least read the appropriate chapters. Then try out some
combinations of attributes matching the display adapter you are
using.
Chapter II, SFD getting started page 52 Chapter II, SFD getting started page 52
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Color Screen Attributes Color Screen Attributes
| The Normal and Selected Choices are pretty straightforward. You can
select any one out of 16 foreground colors and any one out of 8
background colors for each one of the two.
Keep in mind, that if you use 'intensive' forground colors you may
| get in conflict with the 'Intens' attribute for Active.
| The choices you have for Active are:
Invert : The foreground color becomes the background color and vice
versa. Intensified background colors are not possible.
Therefore the non intensified equivalent is being used if
necessary.
Blink : Self explanatory. The blink frequency can be adjusted. See
under 'System Defaults'.
Intens : The foreground color is displayed intensified.
Multiple choices of the above attributes are possible. Multiple choices of the above attributes are possible.
| Now let us specify a 'new look' for the Constants in our format.
The foreground and background colors you see are modified as follows:
Select the appropriate field.
Choose your favourite from the selection you are presented with.
Simple, isn't it?
| The Active attributes can be set or reset by pressing the Return key.
Once you have made your selection, go back to your format. If you
have a Color Monitor you will instantly see the results of your
modifications.
Chapter II, SFD getting started page 53 Chapter II, SFD getting started page 53
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Monochrome Attributes Monochrome Attributes
Norm : 'White' text on black where 'White' means the color of
the screen you are using (usually green or amber).
Intens : Same as 'Norm' but brighter Text. Obviously, 'Norm'
and 'Intens' exclude each other.
If 'Intens' is used together with 'Invert' text just
appears to be 'thinner'.
Invert : Black text on 'White' background.
Underline : Field will be underlined. 'Underline' and
'Invert'exclude each other. In this case, 'Invert'
takes precedence.
Marked : Directly before and after the field a triangle
pointing towards the field will be displayed. If
| 'Marked' is used as an Active attribute the triangles
| will blink, if it is used as a Selected attribute they
are static.
Blink : The field content will blink. The blink frequency can
be adjusted. See under 'System Defaults' for details.
Multiple choices of above attributes are possible with the exceptions Multiple choices of above attributes are possible with the exceptions
mentioned. mentioned.
To set/reset monochrome attributes just travel to the appropriate
| fields and press Return.
Now make your choices. Once you have finished go back to your format
you will instantly see the Results of your modifications (at least if
you are working on a monochrome monitor).
To get some exercise, feel free to venture using other options as
well. Maybe you even want to change some other specifications. Just
do it and watch the results.
Once you are done with the exercises two ways are offered to exit
your format.
1. | Fill it out completely and press Return
or
2. Hit the ABORT key.
Chapter II, SFD getting started page 54 Chapter II, SFD getting started page 54
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Conclusion Conclusion __________
The purpose of this exercise was to give you a brief overview on the
Screen Format Designer. Only a small part of the features was Screen Format Designer
touched, but you should now have enough knowledge to continue your
exploration on your own, using the descriptions later on in this
manual.
If you should have encountered any difficulties during our exercise
or did not get along with the instructions given, I encourage you to
just try it again and I am sure you will succeed this time.
Anyway, as long as you are not completely familiar with the system
| you are urged to make frequent use of the Help feature.
Note: If for some reason you accidentally 'scrambled' your address Note:
label format during our exercise, don't worry you will find one among
the sample programs which came on your distribution disk. Some of
them, (including the address label format) will be used later on to
give you an idea about SCL and others will be discussed in the SCL
Appendix A of this manual to demonstrate some advanced SCL
programming technics.
Chapter II, SFD getting started page 55 Chapter II, SFD getting started page 55
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Screen Format Designer The Screen Format Designer
( S F D ) ( S F D )
Functional Description Functional Description
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Functional Description - Introduction Functional Description - Introduction
| This chapter of the manual provides a functional description of The The
| Screen Format Designer Program. Screen Format Designer
The first chapter describes the basic program layout.
It includes an overview on all files being used or created by SFD as SFD
well as the keyboard functions and a description of the Online Help
System.
The next chapter covers the main menu and all functions accessible
from it.
The third chapter then talks about Format Design and all related
functions.
Chapter II, SFD functional description page 57 Chapter II, SFD functional description page 57
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SFD Basic Program Layout SFD Basic Program Layout
SFD has been designed around a Main Menu which automatically comes up SFD
as soon as the program has been started.
All basic functions are shown and accessible from here. They are
logically grouped in seven lines. Within each group the most
important item is listed first.
| The Up and Down keys can be used to jump between the groups and items
| in a group are selected with the Right and Left keys.
There are two functions on the main menu which are considerably more
complex than all others Format layout design and Test. They are
virtually subsystems on their own.
| Format layout design for example leads through a whole series of
screens and functions.
It first starts with the actual layout editor. Within the layout
editor, many keys have a different meaning compared to normal
operation and there are also a lot of special functions available
including it's own little menu offering additional features. Once the
| Layout editor is left, the Format Specification Mode is entered
presenting another local menu with all selections necessary to
specify a format and it's fields.
| Leaving the Format Specification Mode then finally leads back to the
| Main Menu.
| The Format Test function is not that complex but it also allows to
| enter the Format Specification Mode, in this case via another local
menu.
This allows a very interactive method of testing a new format. If
initial requirements are not met or require to be redefined, the
appropriate changes can be performed and verified instantly in a
simple iteration.
Chapter II, SFD functional description page 58 Chapter II, SFD functional description page 58
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Files used by SFD Files used by SFD
In order to run, SFD requires the following files to be present in SFD
the same subdirectory as SFD.EXE itself:
SFD.FOR: SFD.FOR:
SFD's own format file, containing nearly sixty formats. This file is SFD's
not exactly compatible with the '<Name>.SCS' files being generated by
SFD and no attempt should be made to modify this file using SFD. This SFD SFD
could lead to unpredictable results.
SFD.FIN: SFD.FIN:
Sorted Index file for SFD.FOR. This file is similar to the <Name>.SCS
files being generated by SFD and contains informations to access the SFD
formats in SFD.FOR.
SFD.MSG: SFD.MSG:
| Contains all field messages proprietary to SFD. It has the same SFD
format as the <Name>.MSG files created by SFD. SFD
SFD.ERR: SFD.ERR:
| A Text file containing all necessary system messages, i.e all
messages required by SCL (as contained in "SCL.ERR") as well SCL
additional ones having been especially defined for SFD. SFD
SFD.DEF: SFD.DEF:
| This file is automatically created if any of the SFD Defaults (Design
or System Defaults) are changed and saved. If it is not present, SFD SFD
will use its own built in defaults. If for any reason it is desired
to go back to default parameters, just remove this file.
Chapter II, SFD functional description page 59 Chapter II, SFD functional description page 59
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Files generated by SFD Files generated by SFD
Whenever a new work file is opened with SFD, the following files will SFD
be created:
<workfile>.SCS: <workfile>.SCS:
Format file. This file will contain all formats including their
specifications with every format occupying about 4.5 KB.
The Layout of this file is described in file SCL.DOC as type
'Screen'.
For a discussion of it's content refer to "Format Specifications"
later in this manual.
<workfile>.SCI: <workfile>.SCI:
Index (Key) file for <workfile>.SCS.
This file contains indexing information to the format file such as
all the format names and the relative positions of these formats
within <workfile>.SCS.
In addition, it also contains informations whether a format is
deleted. The layout of this file can be found in SCL.DOC under
'Sckeyrec'.
It has to be sorted in order to access formats in a user program via
SCL.
| This is automatically done whenever you Exit the SFD program. Since SFD
the keyfile is very small, sorting it usually takes only a few
seconds.
<workfile>.MSG: <workfile>.MSG:
| Contains all explanatory messages specified for fields on any of the
formats in <workfile>.SCS. The format file itself only stores a
pointer to these messages.
The file consists of records with a length of 71 bytes each
(described in SCL.DOC as 'Msgrec').
This leads to a maximum message length of 70 bytes since the first
byte of each record is used to store the length of the message.
Note: All of the above mentioned files are required by SCL to handle Note: SCL
the formats in your <workfile>. Details on how they are used can be
found later in this manual under "The Screen Control Language".
Chapter II, SFD functional description page 60 Chapter II, SFD functional description page 60
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Basic Keyboard Functions Basic Keyboard Functions
The following keyboard functions apply for all formats in SFD. In the SFD
layout editor some keys have different functions. For details see
under "The Layout Editor".
| Right : 1. In Travel Mode : Next Field. Right
| 2. In Entry Mode : Next Character.
| Left : 1. In Travel Mode : Previous Field. Left
| 2. In Entry Mode : Previous Character.
Down : First field on next line. Down
Up : Last field on previous line. Up
Home : First field in line. Home
End : Last field in line. End
PgDn : Last field on format. PgDn
PgUp : First field on format. PgUp
Tab : Next field. Tab
ShiftTab : Previous field. ShiftTab
Backspace : Delete character left of cursor. Backspace
Insert : Insert a space at the cursor position. Insert
Delete : Delete character under cursor. Delete
Return : 1. Entry mode. Return
2. Finish field and advance to next field (if
already in the last field, finish the format).
| 3. Toggle Selected Status of a Constant.
Escape : Finish Format. Escape
F1 : Format related Help information. F1
F2 : Field related Help information. F2
F3 : UNDO. Restores field to previous content. F3
F10 : Abort current activity (not valid with everyformat). F10
Note: A detailed explanation of all key functions can be found Note:
earlier in this manual under "Getting started".
Keys only being valid in certain contexts are mentioned where they
apply.
Chapter II, SFD functional description page 61 Chapter II, SFD functional description page 61
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Online Help Facility Online Help Facility
SFD provides an extensive Online Help Facility in up to four levels SFD
as follows:
Explanatory field input informations: Explanatory field input informations:
This feature is only available with some formats, one being the main
menu. SFD automatically displays some informations regarding the SFD
currently active field (in the case of the main menu, on the bottom
line).
AutoHelp: AutoHelp:
| Optional feature, selectable via System Defaults which causes some
basic Help information to be displayed if a specified number of
consecutive input errors have been made.
Format Help: Format Help:
Context sensitive Help relative to the current format. Can be
| accessed anytime by pressing F1.
Field Help: Field Help:
Context sensitive Help informations relative to the currently active
| field. This feature can be accessed anytime by pressing F2. Field
Help may not be available in all cases.
Chapter II, SFD functional description page 62 Chapter II, SFD functional description page 62
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Input Error Handling Input Error Handling
If an Input error is detected, the system reacts with a 'Beep' and,
depending on the format, an error message may be displayed. If the
| Autohelp feature is enabled and a specified number of consecutive
errors has occurred, a format containing some basic help informations
is displayed in addition.
There are basically three different types of errors which can occur:
1. An invalid key has been pressed.
2. Wrong data has been entered into a field.
3. A field where data entry is mandatory has not been filled
in.
They are described in the following.
Invalid Key Invalid Key
Whenever a key is pressed it is checked for validity in the given
context.
Some examples:
| * Entering a displayable character while being in a Constant
| field.
* Pressing an 'Alpha' key where numeric data is anticipated.
* Entering a decimal point if an integer number is required.
* Pressing a function key not valid on this format.
Wrong data Wrong data
Whenever an attempt is made to leave a field (i.e pressing RETURN,
TAB or a similar key) the data having been entered into it is checked
for validity. Should it be found to be invalid, the user is forced to
correct it before he is allowed to leave the field.
Missing mandatory data Missing mandatory data
Any attempt to leave a format missing mandatory data will be refused.
The cursor will automatically be placed into the first field where
data was found to be missing.
Chapter II, SFD functional description page 63 Chapter II, SFD functional description page 63
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Main Menu The Main Menu
The main menu is subdivided into an header, the main body finally,
below it, the message line.
The Menu Header The Menu Header
In it's upper part the program name, the release number and a
copyright note are displayed.
Below this, there are three lines of information:
Act DIR Act DIR
Displays the currently active disk and subdirectory.
Workfile Workfile
Displays name and path of the currently loaded workfile (or
'<none>').
Formats Formats
The number of valid formats in the current workfile.
The Main body The Main body
It shows seven groups (lines) of items. On the lefthand side of each
line the name of a group of functions is mentioned and the entries to
the right of it represent the functions available within the
appropriate group.
All functions are described in the following paragraphs under their
group description in the order they appear on the menu.
The Message Line The Message Line
A short explanation of the currently highlighted function.
Chapter II, SFD functional description page 64 Chapter II, SFD functional description page 64
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
DESIGN DESIGN
This Group provides all functions necessary to design a format
layout, specify it's parameters and finally to test it. Since this
group is amongst the most comprehensive parts of SFD it's functions SFD
are covered under an own header ("Format Design") later on in this
manual.
Chapter II, SFD functional description page 65 Chapter II, SFD functional description page 65
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
FILE FILE
There are three functions belonging to this group.
Load File: Load File:
Load File can not only be selected via the main menu, it also comes
up automatically whenever no workfile is loaded and any other
function requiring a workfile has been selected. Allows to load a
| formatfile as the active workfile and can also be used to change the
active workfile.
If this Function is selected SFD will ask for the name of the SFD
| workfile to be loaded which will then be searched for in the Active
| Directory.
| Since a format file is always assumed to have an extension of .SCS it
is not required to specify it and any extension entered will be
ignored by SFD. SFD
| If the format file specified exists in the active directory it is
then loaded.
Otherwise SFD displays a message prompting whether a new file should SFD
be created or not.
Note that if another format file was loaded before it is
automatically saved to disk.
In case the specified format file (<workfile>.SCS) was found,
exceptions loading it are handled as follows:
If no Indexfile (<workfile>.SCI) exists it will be created.
If no message file (<workfile>.MSG) is found, SFD offers the option SFD
to create a new (empty) one.
Please note that in this case all field messages which might have
been specified for any formats in the <workfile> will be lost and
have to be reentered.
CHDir: CHDir
This option provides essentially the same services as the equivalent
DOS command.
| With CHDir you can change the currently active drive and/or
subdirectory.
A file to be loaded or to be copied from will always be assumed to be
| in the Active Directory.
Note: The active directory and even the current disk drive can be Note:
changed anytime during program execution, even while a workfile is
loaded. Since SFD always stores the full path of any file having been SFD
loaded, the change of the active subdirectory does not affect it.
Therefore, a file is always stored back to the subdirectory it was
loaded from.
Chapter II, SFD functional description page 66 Chapter II, SFD functional description page 66
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Crunch: Crunch:
This function physically removes all previously deleted formats from
the active workfile.
| Once a Crunch has been performed on a workfile it is not any longer
| possible to undelete previously deleted formats. A Crunch reduces the
size of the format file by the space previously allocated to the
deleted formats (about 4.5 KB per format) and also speeds up
subsequent format access.
| For these reasons it is recommended to perform a Crunch prior to use
a format file in a program.
Before SFD attempts to crunch a file, it saves the old version of the SFD
format file under the name <workfile>.BAK. This is done in order to
provide a backup possibility in case of system errors etc during the
actual crunch operation.
The index file is not saved since it can easily be rebuild.
The following procedure should be applied to recover an old format
| file from <workfile>.BAK whenever it is suspected that an error might
| have occurred during Crunch and you are not sure about the integrity
of the format file :
1. Save the files <workfile>.* on a backup disk and store them
safely away.
On your work disk, perform the following operations:
2. Delete <workfile>.SCI, the index file. (This index file had been
| created to match the crunched version of the format file and is
therefore useless at the moment.
3. If present, delete file <workfile>.SCS (the newly generated,
crunched format file, which is suspected to be wrong.
4. Rename <workfile>.BAK to <workfile>.SCS.
5. Start SFD and load <workfile> as your workfile. SFD
6. SFD will automagically create a new index file for it SFD
(<workfile>.SCI).
7. Check the integrity of the format file by looking at the number
of formats and/or printing a format list. Once you are satisfied
create a backup copy of <workfile>.* and discard the
intermediate backup copy you have made at the beginning of this
procedure.
8. You now have backed up to the point before you attempted to
| perform the Crunch operation.
Chapter II, SFD functional description page 67 Chapter II, SFD functional description page 67
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
FORMAT FORMAT
This set of functions deal with copying, deleting and undeleting of
formats in the workfile. The meaning of the single items is as
follows:
Copy: Copy:
Duplicates a format under a different name within the workfile. This
feature is especially handy if several similar formats are required
| for one program. Using Copy to duplicate a master version and change
it later on can save considerable time over building every single
format from scratch.
| If Copy is selected you will be asked for the name of the format to
be copied (Origin) and the name under which you want it to be copied
| (Destination). Destination must be a name not yet existing in your
format file.
| Copy (together with Delete) can also be used to change the name of a
format by first copying it to the new name and afterwards deleting
the old one.
Delete: Delete:
Deletes a format from the active work file.
Delete does not actually remove this format from the file, it is just
| marked invalid (logically deleted). This has several advantages,
probably the biggest one being that it can still be recovered
(undeleted).
| Please note that undelete is only possible as long as no Crunch has
been performed on the work file.
Undelete: Undelete:
| Undelete restores a format which had been logically deleted before,
| in other words, it can reverse a Delete operation. Before attempting
| to undelete a format, make sure that no other format exists with the
same name.
| The names of all formats capable of being undeleted can be seen by
| either printing a Format list or via the Display formats command.
Transfer: Transfer:
To load a format from a different format file.
If this function is selected SFD will ask for both the name of the SFD
format file and the name of the format to be loaded. In case both can
| be found in your Active directory the format is added under the same
| name to your active work file. Note that like in all cases where you
are asked for a format file, the name of it is expected to have an
| extension of .SCS, any other extension you may specify is masked off.
Chapter II, SFD functional description page 68 Chapter II, SFD functional description page 68
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
DISPLAY DISPLAY
Formats: Formats:
The names of all formats in the current work file are displayed. The
| logically deleted formats will be included as well, they are marked
as being deleted.
Files: Files:
| Initiates a display of the names of all format files in the active
| directory.
Directory: Directory:
Provides the same functions as the DOS "Dir" command.
A file specification according to DOS rules is expected and all files
matching this specification will be displayed.
Wild card as well as drive/subdirectory specifications follow the
same rules as for the DOS "Dir" command.
Chapter II, SFD functional description page 69 Chapter II, SFD functional description page 69
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PRINT PRINT
Single format: Single format:
Prints a hardcopy of the format specified, accompanied by a
description of its fields, on the active printer.
If the printer is not ready or out of paper, such a status will be
reported back to you and you are given the option to either correct
the situation or abort the print.
Note that in order to work correctly the printer must be capable to
print the upper half of the character set according to IBM standard.
All formats: All formats:
Similar to above, but prints hardcopies of all valid formats in the
active work file.
Format list: Format list:
Prints a listing of the most important details of all formats in the
active work file.
These are :
Format name, size of the format, total number of fields, cursor home
| position, the related help format and information whether the format
is deleted or not.
A summary is also added. It lists the total number of formats in the
file as well as the number of valid and deleted formats.
Chapter II, SFD functional description page 70 Chapter II, SFD functional description page 70
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
DEFAULTS DEFAULTS
The two functions in this group allow to inquire or change of SFD's SFD's
program default specifications.
If changed, the Option is given to save the new defaults in a disk
file (SFD.DEF) to be automatically used again with any subsequent run
of SFD until they become altered again. If the option is choosen not SFD
to save the new defaults, they will only be valid for the current
program run.
Design: Design:
Left Field Limit: Left Field Limit:
The character to be interpreted as the left limit of a field, i.e
whenever this character is found, SFD assumes that a field is about SFD
to start at the next character position.
The default setting of this parameter is '['.
Right Field Limit: Right Field Limit:
The character indicating the end of a field. The field ends at the
character position ipreceeding the Right Field Limit Character.
The default is ']'.
Note: For detailed informations on how to use the field limit Note:
| characters refer to Basic Format Layout Design. later on in this
manual.
Background Color: Background Color:
One among eight colors to be used as background during format layout
design.
The default is 'Blue'.
Foreground Color: Foreground Color:
One among sixteen colors to be used as foreground (text) color during
format layout design. The default is 'light grey'.
Note: The above two color options only apply when a color graphics Note:
| adapter is used. On systems using a Monochrome adapter, the Design
| Background Color is always "Black" and the foregound color is "White"
(i.e the color of your screen).
Chapter II, SFD functional description page 71 Chapter II, SFD functional description page 71
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Surrounding Area: Surrounding Area:
| Used by the Layout Editor. If a format layout work area is defined to
be smaller than a full screen, the surrounding (unused) area is
filled with the character specified here. The default setting for
this option is Character Ascii (Hex) 'FA' (a dot).
Note: For more information on how to enter special characters see Note:
Appendix A, 'Tips and Tricks'.
Chapter II, SFD functional description page 72 Chapter II, SFD functional description page 72
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
System defaults System defaults
The following parameters can be altered: The following parameters can be altered:
Auto Help: Auto Help:
SFD can be configured to automatically come up with Help information SFD
if a certain number of consecutive input errors have occurred.
'Yes' is the default setting and indicates that this feature is
| enabled. If 'No' is selected, Auto Help is disabled.
After n Errors: After n Errors:
| Specifies the number of consecutive errors after which the Auto help
screen is to be displayed.
Please note, that if consecutive errors are identical they are
counted double i.e. the second and all following occurrences are
counted twice.
The Default is '3'.
Beep yes/no: Beep yes/no:
Determines whether SFD 'beeps' in case of errors. SFD
If 'no' is selected, SFD will stay quiet. SFD
The default setting is 'Yes'.
Length (ms): Length (ms):
Duration of the 'beep' tone in milliseconds. The default is 200.
Pitch (Hz): Pitch (Hz):
Every 'beep' is made up of several short bursts of two alternating
frequencies which can be freely specified.
A Sound using a single frequency can be selected by setting both
frequencies to the same value. The frequencies must be between 100
and 9999 Hz.
The default settings are 200 Hz for the first and 350 Hz for the
second frequency.
Field Blink Frequency: Field Blink Frequency:
SFD allows to select the frequency a field is blinking. This figure SFD
is expressed in milliseconds and determines the delay to wait before
inverting the field color again.
Chapter II, SFD functional description page 73 Chapter II, SFD functional description page 73
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Char YES: Char YES:
The Ascii code of the upper case letter indicating 'Yes', i.e. in the
case of english '89' ('Y').
Char NO: Char NO:
Same as above for 'No', i.e in the case of english '78' ('N').
Note: The above two options are used in the case of 'boolean' Note:
fields. These fields only allow either one of above characters to be
entered. Lower case characters are automatically translated.
Cursor Wraparound Disabled: Cursor Wraparound Disabled:
If this option is set to 'Yes' then Cursor Wraparound is disabled for
| all formats in SFD. This Option is especially beneficial if a Mouse SFD
is utilized to operate SFD. SFD
| Provided Cursor Wraparound is not disabled, pressing Right or Down
while being in the last field of a format moves the cursor to the
| first field. The opposite happens if Left or Up is pressed while
being in the first field of a format. Please note, that even if
cursor wraparound may not be disabled it is not available with all
formats in SFD. SFD
Chapter II, SFD functional description page 74 Chapter II, SFD functional description page 74
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
EXIT EXIT
Terminate Program: erminate Program:
If a workfile was loaded it is automatically sorted before SFD SFD
terminates.
This is necessary to make the formats within this workfile accessible
for SCL routines. SCL
Note: SCL cannot be used with unsorted format files. Any attempt to Note: SCL
do so will result in a fatal error aborting the appropriate program.
Chapter II, SFD functional description page 75 Chapter II, SFD functional description page 75
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Design Format Design _____________
Basic Work Flow Basic Work Flow
The basic flow of developping a new format is as follows: The basic flow of developping a new format is as follows:
1. Design of the basic format layout.
2. Specification of all fields.
3. Global specifications.
4. Determination of colors & attributes.
5. Test of the format and necessary changes.
Note: This sequence only represents a crude guideline. Note:
Except for step 1, SFD does not impose restrictions on the sequence SFD
these actions have to be performed. In practice, you will find that
some steps can sometimes be omitted completely since SFD's default SFD's
settings are often sufficient.
On the other hand you may find that some activities have to be
performed more than once in order to achieve the desired results.
Initially, steps 1 through 4 should always be performed via the main
| menu item Layout Design.
Beside a few restrictions, steps 2 to 4 can also be carried out using
| the Format test facility with the added advantage that results of
changes become immediately visible.
| However, since changes are much more convenient within the layout
| design system it is advisable to perform all major specification work
there and use the test facility only to carry out minor corrections
found necessary while testing the format.
Chapter II, format design page 76 Chapter II, format design page 76
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Layout Editor The Layout Editor
The Layout editor is activated by selecting the first item on the
| Main Menu, "Layout Design". First, SFD will ask for the name of the SFD
format to load. In case this format exists, it is loaded and
displayed, otherwise SFD gives you the option to create a new format SFD
with the specified name.
The Layout editor provides a worksheet to develop or change a format
layout as well as to specify size and location of its fields.
Formats in the layout editor are displayed in a slightly different
| fashion than under Test or if they are used in a SCL application SCL
program:
* All fields are shown with Left and Right delimiters (Default:
'[' and ']').
* The Cursor has the shape of a big block and can be moved freely
across the whole format.
* If the format is smaller than a full screen (80 X 25) then the
area outside the format is filled with the characters specified
| for this purpose in Design Defaults.
In addition some keys do have other meanings than in normal formats.
Note: If the Layout editor has been instructed to create a new Note:
format, SFD assumes by default that it's size is 25 lines with 80 SFD
characters each (a full screen). This is the reason why the whole
screen is initially erased in order to serve as a drawing board.
Chapter II, format design page 77 Chapter II, format design page 77
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Layout editor Meaning of keys Layout editor Meaning of keys
| Backspace, Insert and Delete have the same meaning as under normal Backspace Insert Delete
operation, but they do work on a full line instead of in a field.
Home moves the cursor to the upper left corner of your worksheet. Home
| End moves the cursor to the first character of the last line. End
| PgUp deletes the line under the cursor. PgUp
| PgDn inserts a line. PgDn
| Return moves the cursor to the first character of the next line. Return
| The Arrow keys allow the cursor to move freely on the format.
| The Arrows are working in wrap-around mode as follows: The Arrows are working in wrap-around mode as follows:
Right with the cursor being in the rightmost position moves it to the
first position of the next line.
Left with the cursor being in the first position of a line moves it
to the last position of the previous line.
Right while being in the lower right corner of the worksheet moves
the cursor to the upper left corner.
Left while being in the upper left corner moves the cursor to the
lower right corner of the worksheet.
| Pressing Up while being in the first line moves the cursor to the
| last line and the opposite happens with Down while in the last line.
Note: All Special key functions belonging to the layout editor are Note:
discussed later on in this chapter together with the actions they
perform.
Chapter II, format design page 78 Chapter II, format design page 78
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Drawing Fields Drawing Fields
| All desired fields in a format must be determined within the Layout
| Design phase.
To describe their position and length two special characters are
| defined in SFD: The Left Field Delimiter (LD) and the Right Field
| Delimiter (RD).
The default values are '[' for LD and ']' for RD. These values can be
| changed to any other character via Design Defaults.
A LD determines the begin of a field. SFD always assumes that a field SFD
begins at the character position immediately following an LD.
It also assumes that it ends at the position immediately before a RD.
A field must always end on the same line it begun, i.e it may not
continue on the next line.
In order to allow consecutive fields with only one character position
between them, it is possible to omit the RD character. In this case,
the LD is interpreted as the termination of a field at the position
preceeding it and also as the start of a new field at the position
succeding it.
However you should note that the last field on any line has still to
be terminated with an RD character.
According to this, all the examples below represent valid field
constructions. (The line below the actual delimiters shows the range
of each field as described by the delimiters in form of 'x'
characters).
[ ] [ [ [ ][ ]
xxxxxxxx xxxxxxxxx xxxxxxxx xxxxxxxxx xxxxxxxxx
Chapter II, format design page 79 Chapter II, format design page 79
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Special Functions Special Functions
In order to facilitate the process of developing a format layout, the
Layout Editor offers a whole range of special functions. Although
very versalite, they can be activated using very few different keys.
The ones that are most frequently used are directly accessible via
function keys. Some other, less often used functions can be called up
via a small menu which itself is accessible with a function key.
The appropriate Function keys are as follows: The appropriate Function keys are as follows:
F4 : Delete Block
F5 : Mark Block Corner
F6 : Copy Block
F7 : Undraw Box (or line)
F8 : Draw Box
F9 : Menu Functions
The following paragraphs will discuss all special functions in
logical sequence.
Chapter II, format design page 80 Chapter II, format design page 80
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Mark Corner (F5) Mark Corner (F5)
| Many of the layout editors special functions are so called Block
| Functions.
| Before any of these Block Functions can be performed it is necessary
to important to describe the rectangular area (block) they should act
| upon. This is done by simply marking its two diagonal corners.
A block does not necessarily have to be two-dimensionall it can also
| be a line or a column of any desired length. In these cases just mark
both ends of it.
Pressing F5 sets a mark at the cursor position, shown as a small F5
rhombus.
| Incidentally set Marks can simply be removed again by positioning the
| cursor on them and pressing F5 again.
Notes: Only a maximum of two marks may be set at any time, any Notes:
additional attempt is refused. Marks are automatically removed as
| soon as the Block Function is performedn
Copy Block (F6) Copy Block (F6)
| Pressing F6 will duplicate the marked block at the current cursor F6
position (Building it's upper left corner). Please note that for
obvious reasons it is not possible to copy a block into itself, in
| other words to a cursor position enclosed by the marked Block.
If the block to be copied is bigger than the space available at the
cursor position, the parts which do not fit are automatically
truncated.
Delete Block (F4) Delete Block (F4)
| F4 erases the marked Block, in other words, moves spaces to it. This F4
function can also be used to erase the whole worksheet by marking its
two corners.
Chapter II, format design page 81 Chapter II, format design page 81
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Draw Box (F8) Draw Box (F8)
| Pressing F8 causes a box to be drawn with the two marks representing F8
its diagonal corners.
The linestyles used for both horizontal and vertical lines can be
| selected via the local menu (for further details refer to "Local Menu
Functions").
When using single or double lines graphic characters the proper
connections to other boxes will be done automagically.
Beside for drawing boxes, this function can also be used to draw
lines by positioning the two marks in either the same column
(vertical line) or the same row (horizontal line).
Undraw box (F7) Undraw box (F7)
Erases the marked box, i.e replaces it by space characters. The same
| rules apply as for the Draw Box Function.
Chapter II, format design page 82 Chapter II, format design page 82
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Menu Functions Menu Functions
The menu can be accessed by pressing F9. It offers the following F9
functions:
Change Format size Change Format size
This function allows to change the size of the currently loaded
format layout.
Valid sizes can be anything from 1 to 25 lines with 1 to 80
characters each.
Boxes Linestyles Boxes Linestyles
This function facilitates the selection of the linestyles to be used
| with the Box drawing feature.
Possible linestyles are displayed in two groups, one for horizontal
and one for vertical lines. Each of them can be determined
independently.
Each group contains the following:
1. Double Line Block Graphics characters.
2. Single Line Block Graphics characters.
3. White half Blocks.
4 to 6: Full Blocks in different shades.
7. Any other character, see Text below.
For the first two Options (Single and Double line block graphic
characters), SFD is even capable to connect boxes using the SFD
appropriate 'X' and 'T' elements available in the Character set. The
last Option is used to choose any other displayable character.
If selected, another format comes up showing an extract of 32
characters at a time out of the complete system characterset. The
| Left and Right keys can then be used to point to the desired
character or to select another set of 32 Characters to choose fromn
| Once the desired character is found just press Return to pick it.
Using this feature boxes and/or lines made up for example of smiling
faces or $-signs can easily be created.
Chapter II, format design page 83 Chapter II, format design page 83
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Key Redefinition Key Redefinition
This function allows to assign any desired keyboard key to any
displayable character. It becomes very handy if certain Characters
are required in a format which can not normally be accessed with a
keyboard key.
The selection of the appropriate character to be displayed works in a
| similar fashion as the one above described for User selectable
| linestyles.
Up to six keyboard keys can be redefined at the same time.
Note: There exists also another possibility to display characters Note:
normally not accessible via the keyboard which is described in
Appendix A under 'Tips and Tricks'.
Chapter II, format design page 84 Chapter II, format design page 84
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Specifications Format Specifications
All format specification parameters are stored in the actual format
file (<Name>.SCS).
| Once a new format has been designed and the Layout Editor is exited,
all these parameters will be set to default values, i.e every field
is assumed to be a variable, there is no input check to be performed,
the color of the format is white on a black background and so on.
These specifications can then be tailored to your own
requirements.
When an existing format is modified, SFD where format specifications SFD
| can be changed. The main one is directly after the layout Editor has
been exited and the other one, which is slightly limited in some
| aspects is accessible via a local menu during Format Test. Two
main groups of specifications exist:
Field Specifications Field Specifications
The specifications defining a single field on a format.
Global Specifications Global Specifications
All specifications proprietary to the whole format.
Not only are the format specifications directly accessible and
alterable but it is also possible to copy field specifications from
another field or to change colors and attributes of a whole group of
fields such as all variables or all constants on a format.
| Note: Some parameters cannot be modified during Format Test, where Note:
this is the case, it is mentioned in the following.
The discussion of the format specifications is subdivided under three
headings:
* Field Specifications
* Colors and Attributes
* Global Specifications and Control Parameters
Chapter II, format design page 85 Chapter II, format design page 85
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Field Specifications Field Specifications
Type Type
Defines the field type. This parameter cannot be modified during
| Format Test. The possible choices are:
Variable: A normal data entry field.This is the default. Variable
| Constant: A selectable item (for example in a menu). Constant
Output : Output A field not accessible by the cursor (for example a
message line).
Group from/to Group from/to
| Important for Constants. All Constants within one group are
exclusive, i.e. only one field within a group can be selected at any
one time. Enter the numbers of the first and the last field of the
group. The default is the current field for both values. These
parameters have no meaning for fields other than constants. If the
field specifications for the first field of a group are modified,
they are automatically copied to all other fields of that group. The
only parameters not being copied are: 'Selected' and 'Messages.
| This parameter can not be modified during Test.
Message Message
A message can be specified for each field on a format. It is stored
| in file <Name>.MSG and automatically displayed in the Message field
(see under 'Global Specifications'). There are also some other
possibilities to use this message, see Appendix A under 'Advanced
Programming Technics'. The default is no message.
Helpscreen Helpscreen
| The name of the format to display if the Field help Key, usually 'F2'
is pressed. The default is no helpscreen.
Fill Fill
Variables only. The character to replace all spaces with if the field
| is active. The default is <Space>.
Chapter II, format design page 86 Chapter II, format design page 86
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Delimiter Left Delimiter Left
| The character to display at the position where the Left field
| delimiter was put during Layout Design, i.e the character position
preceeding the field.
The default is <space>.
Delimiter Right Delimiter Right
| The character to display at the position where the Right field
| delimiter was put during Layout Design, i.e the position immediately
after the field.
The default is <space>.
Justify Justify
Determines how text within the field is to be justified. The possible
choices are 'Left', 'Right' and 'Center'. The default is 'Left'.
Decimals Decimals
Numeric variables onlyn Determines how many positions are to be
displayed after the decimal point. The default is 0 (zero).
Mandatory Mandatory
Determines whether input is mandatory to this field. In case of
| constants it determines whether a selection within the Group has to
be made. The default is 'No'.
Selected Selected
Determines the initial status of the boolean attribute
'Selected'. It usually applies to constants but it can also be used
for some special effects like highlighting etc. See Appendix A under
'Advanced Programming Technics' for details. The default status is
'No'. Note that this attribute cannot be copied to other fields.
Char Check Char Check
If this parameter is set to 'Yes', each single keystroke can be
externally checked, i.e SCL hands over control to your application SCL
after each keystroke before actually acting on it. For details on the
use of this parameter see the description of the SCL procedure SCL
'Handle_Format' later on in this manual. Additional hints can be
found in Appendix A (Sample Programs, especially Sample 4).
The default for this parameter is 'No'.
Chapter II, format design page 87 Chapter II, format design page 87
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Input Check Input Check
Variables only. Determines the kind of data to be accepted as valid
input in this field.
The possibilities are as follows:
None: No input check is performed. Any data may be entered in None
this field. This is the default.
Integer: Only integer numbers may be entered. Any other input is Integer
refused. The numeric value entered must be within the limits of
'Min' to 'Max' (see below). The maximum possible range is -32768
to +32767. Fields where entries outside this range are required
must be declared as 'Real' (see below).
Real: Any number with or without a decimal point can be entered. Real
It's value must be in the range of 'Min' to 'Max' (see below).
It is not possible to enter numbers in scientific notation.
Alpha: Only alpha characters are allowed in this field. Other Alpha
input is refused.
| Y,y,N,n: Only the characters defined as Boolean_Yes and Y,y,N,n
| Boolean_No (both lower and upper case) may be entered in this
field. For Details see the explanation of these two SCL routine SCL
upon the initialisation of the program. This feature makes it
possible to define optimum formats without any compromises.
Chapter II, format design page 88 Chapter II, format design page 88
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Monochrome Attributes Monochrome Attributes
Normal: The way the field should appear if it is neither 'active' nor Normal
'selectedg. The possible choices are white characters on a black
background (Norm) or white intensified characters on a black
background (Intens). The default is 'Norm'.
Selected: The way the field should look if it is 'Selected' (see Selected
above). The possible choices are:
Invert : Black text on white background.
Underl : Text underlined.
Intens : Intensified textn
Marked : Two triangles are displayed to the left and the
right of the field.
Combinations of above attributes are possible with the following
exceptions:
Invert and Underline are exclusive.
Invert and Intensified result in Invert only.
Active: The way the field should be highlighted if the cursor is in Active
it. Possible choices are:
Invert : The field is inverted.
Underl : Underlined text.
Intens : Intensified text.
Marked : Two blinking triangles are displayed to the left and
the right of the field.
Blink : The field blinks.
Combinations of the above attributes are possible with the same
| exceptions as the ones mentioned for the Selected attributes. Since
| the Active attributes are just 'added' if the field becomes active
(for example, a constant can be both 'selected' and 'activeg at the
same time) careful consideration should be given the question what
combination of attributes should be used. If for example the same
attributes are choosen for both 'active' and 'selected' it may not be
possible to see, in which field the cursor is (in the case of
'marked', there is a differentiation because the triangles blink if
the field is active). In addition, restrictions apply to the combined
use of 'Invert' together with 'Underline' or 'Intens'. The result is
always 'Invert' only.
Chapter II, format design page 89 Chapter II, format design page 89
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Color Attributes Color Attributes
The Color Attributes are less complicated to use than the monochrome
ones. For both 'Normal' and 'Selected' there is a choice of one out
of eight background colors and one out of sixteen foreground (text)
colors.
All available colors are listed in Appendix B.
As far as the 'Active' attribute is concerned there are three
different options.
Invert: The field colors are inverted, i.e background becomes Invert:
foreground and vice versa. Since intensified background is not
possible, these colors are replaced by their non intensified (i.e.
darker) counterpart.
Blink : The field is made blinking. Blink :
Intens: The text is displayed intensified. Intens:
The combination of the above options is possible but it should be
considered that the 'Intens' attribute is only meaningful if the
foreground colors choosen for 'Normal' and 'Selected' are non
intensified ones, otherwise it won't be visible.
Chapter II, format design page 90 Chapter II, format design page 90
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Global Specifications Global Specifications
& Control Parameters & Control Parameters
Global Specifications Global Specifications
Cursor Home: Cursor Home:
System generated and not changeable. The first cursor accessible (non
Output) field on the format.
Input Message Field: Input Message Field:
The field where all Input Messages are to be displayed (Input
Messages are the messages specified for single fields, see under
'Field Specifications' for details). If this Parameter is set to 0
(zero) no input messages are displayed. Note that for obvious
reasons, the field specified for input messages should be an 'Output'
field, i.e. not be accessible by the cursor.
The default for this parameter is 0.
Error Message Field: Error Message Field:
The field where all (system as well as user generated) error messages
| are displayed. Everything said above for the Input Message Field
applies here as well. If this field is set to 0 (zero) no error
messages are displayed. There are no restrictions to use the same
field for both error and input messages.
The default is 0 (zero) i.e no error messages are displayed.
Help Format: Help Format:
| The name of the format to be displayed if the Format Help Key
(usually 'F1') is pressed. The default is no help format.
Color Foreground: Color Foreground:
One out of sixteen colors in which the text on the format (except for
the fields) is to be displayed. This option is only meaningful in the
case of Color screens. On monochrome screens, the foreground color is
always white, non intensified.
Color Background: Color Background:
One out of colors in which the format background (except for the
fields) is to be displayed. For monochrome screens, the format
background is always black.
Chapter II, format design page 91 Chapter II, format design page 91
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Cursor Wraparound: Cursor Wraparound:
| If Cursor Wraparound is disabled, pressing Right or Down while the
| cursor is in the last field or Left or Up while the cursor is in the
first field causes a beep. Otherwise, the cursor would be advanced to
the first or last field, respectively.
Note: Alternatively, Cursor Wraparound can also be disabled on a Note:
global basis, i.e effective for all formats in a program by setting
the SCL Constant 'No_Wrap' to TRUE. Refer to the SCL part of this SCL SCL
manual for more details.
Format Abort Ok Format Abort Ok
| If this option is set to 'Yes', pressing the F10 key causes the
| format to be unconditionally terminated, otherwise the Abort function
is disabled for this format.
Chapter II, format design page 92 Chapter II, format design page 92
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
User Function Keys User Function Keys
The User Function Key specifications control SCL's user interrupt SCL's
system. This facility allows to invoke user written routines upon
certain occasions while the format is being handled by SCL routines. SCL
Details and examples on how to use them can be found in both the SCL SCL
part of this manual and in Appendix A.
In principle they work as follows:
When a specified condition occurs, the SCL procedure SCL
'Handle_format' notifies an external procedure and gives it the
choice to do whatever it is intended for (like a special input check
for example).
This external procedure can also return a result indicating an error
or a exception to cause 'Handle_format' to proceed in the desired
way.
By default, i.e. without the need to be explicitly specified, SCL SCL
allows you to invoke external procedures whenever a new field is
entered with the cursor, when it is being left and when the format is
due to be exited.
Beside what is mentioned above it is possible to specify optional
| User Function Keys for any format. User Function keys can be any of
the ten actual Function keys (F1 to F10) and additionally to this up
to ten other keyboard keys.
F1 through F10: F1 through F10:
If selected, causes 'Handle_format' to transfer control whenever the
corresponding function key has been pressed. There are numerous uses
for these Interrupts like the initiation of program functions or to
temporarily disable SCL functions like 'Help' etc. SCL
Remaining fields: Remaining fields:
Up to ten different keyboard keys can be defined per format which,
when pressed, cause 'Handle_format' to transfer control. 'Keyboard
keys' in this context can also be combinations like 'CNTRL-LEFT' etc.
| To define a key as a User Function move the cursor to one of the
| fields containing the text '<deleted>' and press Return. Then press
| the key or key combination you want to specify. To delete a User
| function Key specification, just position the cursor on it and hit
| Return.
|
Chapter II, format design page 93 Chapter II, format design page 93
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Test Feature The Test Feature
Introduction Introduction
SFD allows new formats to be tested without having to write a user SFD
| program. With very few limitations, formats under Test react exactly
as they later on will in a user program. This even includes input
checks etc.
While a format is being tested, it is possible to modify most of it's
specifications and instantly observe the results of these changes,
thus allowing for a very interactive way of developing formats.
The local Menu The local Menu
| All functions to modify Format Specifications during Test are
available through a local menu which can be called up by pressing key
'F9'.
It offers the following choices:
Change Field Specifications/Active Field Change Field Specifications/Active Field
Allows to change the specifications of the field the cursor is
currently in.
Change Field Specification/Other Field Change Field Specification/Other Field
This Option is mainly intended but not limited to allow to change
'Output' fields. If choosen, SFD will ask for the number of the field SFD
whose specifications are to be changed.
Change Global Colors/Attributes Change Global Colors/Attributes
Allows to change Colors or attributes of all fields of a type to be
| specified (Variable, Constant or Output) on the format under Test in
one go.
Change Format/Control Specifications Change Format/Control Specifications
Allows to change the Global Specifications as well as the Interrupt
Parameters.
Chapter II, format design page 94 Chapter II, format design page 94
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
System Limitations System Limitations
The SFD Format Test Feature has a few limitations. These are: SFD
Speed Speed
Since rather than reading from memory as it normally would be done by
SCL much information has to be read from disk, thus slowing down the SCL
| operation of a format under Test quite considerably.
Help Formats Help Formats
It is not possible to access the Help formats specified for the
| format under Test via F1 and F2. They have to be tested seperately.
| F1 and F2 display SFD's own help information relative to Test SFD's
operations.
Format Specifications Format Specifications
| Some specifications can not be altered during Test. These include:
Field Type, Group from/to and Input and error message fields. In
order to change these specifications the format has to be loaded into
| the Layout Editor and the changes have to be performed there.
Chapter II, format design page 95 Chapter II, format design page 95
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
This Page is intentionally left blank
Chapter II, format design page 96 Chapter II, format design page 96
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Chapter III Chapter III
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
This Page is intentionally left blank
Chapter III, Screen Control Language page 98 Chapter III, Screen Control Language page 98
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Screen Control Language Screen Control Language
( S C L ) ( S C L )
Chapter III, Screen Control Language page 99 Chapter III, Screen Control Language page 99
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Introduction Introduction ____________
The Screen Control Language The Screen Control Language
SCL is accommodated in several TURBO PASCAL Source Library files SCL
which must be 'included' in your application programs in order to
access the constructs they contain.
The following is a functional description of all relevant constructs
| contained in these Include Files.
For more details on SCL, including explanations and samples available SCL
in Appendix A.
Chapter III, Screen Control Language page 100 Chapter III, Screen Control Language page 100
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Files SCL Files
The following is a brief description of all SCL files. SCL
SCL.TPU : SCL.TPU :
Contains all SCL definitions and routines. All elements of SCL can be SCL
accessed from your Turbo Pascal 4 program by specifying SCL in the
USES statement.
Example: Example
USES CRT,SCL,PRINTER;
SCL.ERR : SCL.ERR :
This is a basic Error Message File for your programs and contains all
SCL internal error messages. Its use is explained later in this
manual.
Chapter III, Screen Control Language page 101 Chapter III, Screen Control Language page 101
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL - Global Declarations SCL - Global Declarations
General General
| Many of SCL's Global Constants are actually declared as typed Global Constants
| constants.
This was done to allow their alteration during program runtime.
| Despite all their advantages, Typed Constants in TURBO PASCAL also
have one slight disadvantage:
Since they are are only initialized once, i.e at the time the
program is loaded into memory, irritating effects can occur if an
application program is compiled to memory and afterwards run from
there more than once.
For this reason it is recommended to compile programs using SCL to a SCL
'.EXE' file on disk in order to test them.
| The following chapters describe most of the Global Declarations
| forming part of SCL, starting with the Global Constants and
| Variables and followed by those Type declarations which could be of
use outside SCL as well. SCL
Chapter III, Screen Control Language page 102 Chapter III, Screen Control Language page 102
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Control Parameters SCL Control Parameters
The following parameters define the maximum size of files etc. Their
default settings are layed out in such a way that they should be
sufficient in most cases.
They can cater for up to:
100 Error Messages.
400 Field (explanatory) Messages.
20 Formats displayed simultaneously.
Looking at these figures you can see that only some special, usually
very large applications may require parameter changes.
Max_Error_Messages Max_Error_Messages
Declaration:
CONST Max_Error_Messages = 100;
Explanation:
The highest allowed user message number.
This constant must be set to a value equal to or greater than the
number of records in file <workfile>.ERR. The default setting allows
for about 60 additional user messages, since approximately 40 records
are already occupied with system error messages.
Max_Input_Messages Max_Input_Messages
Declaration:
CONST Max_Input_Messages = 400;
Explanation:
| Contains the maximum number of Field Messages.
This constant must be set to a value equal to or greater than the
number of records in file <workfile>.MSG which can be calculated as
follows: (Size of file <workfile>.MSG (in bytes) divided by 71) + 1.
Remark:
In order to allow for later changes to your formats it is recommended
to increase the minimum number calculated as above by at least 50 %.
Max_Heap_Screens Max_Heap_Screens
Declaration:
CONST Max_Heap_Screens = 20;
Explanation:
The maximum number of formats which can be 'stacked' one on top of
the other on the display.
Chapter III, Screen Control Language page 103 Chapter III, Screen Control Language page 103
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
File Names File Names
The following constants define what file name extensions SCL expects. SCL
While it is recommended to leave them at their default settings (i.e
compatible with SFD), it is still possible to change them if
required. In this case the files created by SFD must be renamed
before they can be used with the appropriate application. In any
case, make sure that you don't use extensions which do have special
meanings in your system like '.BAK' (backup file) or '.PAS' (Pascal
source file).
Screenfile_Ext Screenfile_Ext
Declaration:
CONST Screenfile_Ext = '.scs';
Explanation:
File name extension used for the format file. Change if a different
extension is desired.
Indexfile_Ext Indexfile_Ext
Declaration:
CONST Indexfile_Ext = '.sci';
Explanation:
File name extension to be used for the format index file. Change if a
different extension is to be used.
Errorfile_Ext Errorfile_Ext
Declaration:
CONST Errorfile_Ext = '.err';
Explanation:
File name extension to be used for the file containing the system and
user error messages. Change if a different extension is to be used.
Messagefile_Ext Messagefile_Ext
Declaration:
CONST Messagefile_Ext = '.msg';
Explanation:
File name extension to be used for the file containing the field
messages. Change if a different extension is to be used.
Chapter III, Screen Control Language page 104 Chapter III, Screen Control Language page 104
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Help System Parameters Help System Parameters
Autohelp_Screen Autohelp_Screen
Declaration:
CONST Autohelp_Screen = 'autohelp';
Explanation:
| The name of the format to be used for the Autohelp feature. Change if
another format is to be used.
Maxerrors Maxerrors
Declaration:
CONST Maxerrors : INTEGER = 3;
Explanation:
If 'Autohelp_Set' is true, this value determines the number of
| consecutive errors before the Autohelp format is displayed.
Auto_Help_Set Auto_Help_Set
Declaration:
CONST Auto_Help_Set : BOOLEAN = TRUE;
Explanation:
| If this parameter is TRUE , the Auto_Help feature is enabled, i.e the
| format specified as Autohelp_Screen is displayed automatically
| whenever Maxerror consecutive input errors have been made. If it is
| set to FALSE, the Auto_Help feature is disabled.
Code_Help_Field Code_Help_Field
Declaration:
CONST Code_Help_Field : INTEGER = 1060;
Explanation:
| The key used to display the Help Format declared for the currently
active field.
Code_Help_Format Code_Help_Format
Declaration:
CONST Code_Help_Format : INTEGER = 1059;
Explanation:
| The key used to display the Help Format declared for the currently
active format.
Note: For information on how keyboard keys are coded see under Note:
| Keyboard Key Specifications.
Chapter III, Screen Control Language page 105 Chapter III, Screen Control Language page 105
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Beep Parameters Beep Parameters
The following parameters allow to change pitch and duration of the
| Beep, i.e. the sound SCL uses in order to attract the users attention SCL
because of input errors etc.
Beep_Off Beep_Off
Declaration:
CONST Beep_Off : BOOLEAN = FALSE;
Explanation:
If set to TRUE SCL will not 'beep' in case of errors. SCL
Beep_Time Beep_Time
Declaration:
CONST Beep_Time : INTEGER = 3;
Explanation:
Duration of the 'beep' in clock ticks (55 ms).
Beep_Frequency_1 Beep_Frequency_1
Declaration:
CONST Beep_Frequency_1 : INTEGER = 200;
Explanation:
First frequency used for the 'beep' sound in hertz.
The 'beep' consists out of two alternating frequencies.
Beep_Frequency_2 Beep_Frequency_2
Declaration:
CONST Beep_Frequency_2 : INTEGER = 350;
Explanation:
Second frequency used for the 'beep' sound in hertz.
The 'beep' consists out of two alternating frequencies.
Chapter III, Screen Control Language page 106 Chapter III, Screen Control Language page 106
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Message Display Message Display
The following two parameters can be used to allow different, user
selectable 'Help' levels.
Input_Msg_Set Input_Msg_Set
Declaration:
CONST Input_Msg_Set : BOOLEAN = TRUE;
Explanation:
| If set to FALSE, no Field Messages will be displayed.
Can be used to suppress explanatory messages with experienced users.
Error_Msg_Set Error_Msg_Set
Declaration:
CONST Error_Msg_Set : BOOLEAN = TRUE;
Explanation:
If set to FALSE, no messages will be displayed in case of input
| errors. SCL will however still 'beep' as long as Beep_Off is FALSE. SCL
Chapter III, Screen Control Language page 107 Chapter III, Screen Control Language page 107
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Field Attributes Field Attributes
The following specifications define the blink frequency for constants
(see 'Blink' field attribute) as well as what characters are used
for the 'Marked' field attribute.
Blink_Count Blink_Count
Declaration:
CONST Blink_Count : INTEGER = 0;
This count is incremented each clock tick. A clock tick occurs about
18.2 times per second (every 55 ms). Blink_count can be interogated
by user routines.
Timer_Intervall Timer_Intervall
Declaration:
CONST Timer_Intervall : INTEGER = 4;
Explanation:
Used as a delay for the field blinking procedure. Determines the
delay after which the fieldcolor is inverted again. Decrease for
faster and increase for slower blinking.
Mark_Field_Left Mark_Field_Left
Declaration:
CONST Mark_Field_Left : Byte = 16;
Explanation:
| The ASCII code of the character used as the Mark on the left side of
the field (see 'Marked' field attribute).
Mark_Field_Right Mark_Field_Right
Declaration:
CONST Mark_Field_Right : Byte = 17;
Explanation:
| The ASCII code of the character used as the Mark on the right side of
the field (see 'Marked' field attribute).
Chapter III, Screen Control Language page 108 Chapter III, Screen Control Language page 108
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Key Specifications Key Specifications
The values of all keyboard keys associated with functions are defined
as constants in order to be able to adapt programs to non standard
keyboards.
Their values are calculated as follows:
1. Use the decimal ASCII code of the key to perform the
appropriate function.
2. | Add 1000 in case this key creates an extended code,
i.e one preceeded by an 'ESC' character.
Code_Cancel_Act Code_Cancel_Act
Declaration:
CONST Code_Cancel_Act : INTEGER = 1061;
Explanation:
The key used to cancel a change to a 'variable' and to restore the
original content of it (Default:F3). Modify in case you want some key
to perform this action.
Code_Abort Code_Abort
Declaration:
CONST Code_Abort : INTEGER = 1068;
Explanation:
The the key to unconditionally terminate the current format in case
the 'Abort Ok' attribute is set to 'Yes' in its Global
specifications.
Code_Escape Code_Escape
Declaration:
CONST Code_Escape : INTEGER = 27;
Explanation:
The key to terminate a format.
Chapter III, Screen Control Language page 109 Chapter III, Screen Control Language page 109
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Performing 'Edit' functions Performing 'Edit' functions
CONST Code_Home : INTEGER = 1071;
CONST Code_Tab : INTEGER = 9;
CONST Code_Ctrltab : INTEGER = 1116;
CONST Code_Rtab : INTEGER = 1015;
CONST Code_Return : INTEGER = 13;
CONST Code_Left : INTEGER = 1075;
CONST Code_Right : INTEGER = 1077;
CONST Code_Down : INTEGER = 1080;
CONST Code_Up : INTEGER = 1072;
CONST Code_End : INTEGER = 1079;
CONST Code_Ins : INTEGER = 1082;
CONST Code_Del : INTEGER = 1083;
CONST Code_Backspace : INTEGER = 8;
CONST Code_Pgup : INTEGER = 1073;
CONST Code_Pgdown : INTEGER = 1081;
Function Keys Function Keys
| The following are the codes of the keys associated with the Function
| Key Interrupts (see 'Global Format Specifications'). Change as
required for non standard keyboard layouts.
CONST Code_F1 : INTEGER = 1059;
CONST Code_F2 : INTEGER = 1060;
CONST Code_F3 : INTEGER = 1061;
CONST Code_F4 : INTEGER = 1062;
CONST Code_F5 : INTEGER = 1063;
CONST Code_F6 : INTEGER = 1064;
CONST Code_F7 : INTEGER = 1065;
CONST Code_F8 : INTEGER = 1066;
CONST Code_F9 : INTEGER = 1067;
CONST Code_F10 : INTEGER = 1068;
Chapter III, Screen Control Language page 110 Chapter III, Screen Control Language page 110
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Nationalisation Parameters Nationalisation Parameters
The following declarations determine the message to be displayed in
case of a fatal program abort initiated by SCL. Change for other
languages as required.
CONST Fatal_Msg_1 = 'FATAL SCL ERROR: ';
CONST Fatal_Msg_2 = 'ERROR NR: ';
CONST Fatal_Msg_3 = 'PROGRAM ABORTED.';
| The following two parameters define the valid input for Boolean
| Variables. Change according to the language used.
Code_Yes Code_Yes
Declaration:
CONST Code_Yes : INTEGER = 89;
Explanation:
The first letter of the word meaning 'Yes' in upper case (Y). Used
| for Boolean Fields. Change for other languages.
Code_No Code_No
Declaration:
CONST Code_No : INTEGER = 78;
Explanation:
The first letter of the word meaning 'No' in upper case (N). Used for
| Boolean Fields .Change for other languages.
Character sets for Variables Character sets for Variables
The following constants define the characters permitted to be entered
into the various types of Variable fields. Change as required for
national character sets.
CONST Anything_Set : SET OF Byte = [1..6,8,14..27,32..255]; CONST
Integer_Set : SET OF Byte = [32,43,45,48..57];
CONST Real_Set : SET OF Byte = [32,43,45,46,48..57];
CONST Alpha_Set : SET OF Byte = [32,65..90,97..122,128..167];
Chapter III, Screen Control Language page 111 Chapter III, Screen Control Language page 111
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Country Information Parameters Country Information Parameters
SCL_Country SCL_Country
Declaration:
CONST Scl_Country : INTEGER = 0;
Explanation:
The country information to be used for SCL. If this parameter is set
to 0 (zero) SCL uses the country specified in the computers
CONFIG.SYS file. If another countries informations are to be used set
this constant to the appropriate value. (Example : 49 for germany).
The country codes available are described in your DOS manual under
the COUNTRY command.
SCL interrogates the Country informations during initialization and
sets up the following variables accordingly:
Country Country
Declaration:
VAR Country : INTEGER;
Explanation:
Contains the country code of the country currently being used by SCL. SCL
This is either the Country code specified in CONFIG.SYS or if
'SCL_Country' (see above) is set to a value other than 0 (zero) it is
set equal to this.
Date_Format Date_Format
Declaration:
VAR Date_Format : INTEGER;
Explanation:
Determines the date format being assumed by SCL's date formatting and
check routines. 0 means MMDD and 1 means DDMM format.
Date_Separator Date_Separator
Declaration:
VAR Date_Separator : CHAR;
Explanation:
The character to be used as a separator between days, months and year
by SCL's date formatting routines.
Chapter III, Screen Control Language page 112 Chapter III, Screen Control Language page 112
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Time_Separator Time_Separator
Declaration:
VAR Time_Separator : CHAR;
Explanation:
The character to be used as a separator between hours and minutes by
SCL's time formatting routines.
Currency Currency
Declaration:
VAR Currency : String10;
Explanation:
Contains the name or symbol of the currency of the country being
assumed by SCL (see above).
Note: Since SCL's own date and time formatting routines are using Note:
the above informations, they automatically adapt to different
countries and don't therefore have to be nationalized manually. The
same principle should be applied to user written application programs
wherever possible.
Chapter III, Screen Control Language page 113 Chapter III, Screen Control Language page 113
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Control Parameters SCL Control Parameters
Progpath Progpath
Declaration:
VAR Progpath : String80;
Explanation:
Progpath holds the complete path description (including Drive) of the
subdirectory which was active when SCL was initialized, i.e at the
time, the procedure 'Select_Format_File' was called. SCL remembers
this subdirectory because it expects to find its files there, even if
the active subdirectory was changed during program execution. This
variable is quite useful to find other, non SCL files if they reside
in the same directory as the program itself.
Example: Example:
Assumed a program using SCL is started from directory '\Appl\Mydir'
on drive C. If SCL has been initialized then 'Progpath' contains the
following information: 'C:\Appl\Mydir\'. The statement
'Assign(myfile,Progpath + Example.Fil)' now will assign the following
file name to 'Myfile':
c:\Appl\Mydir\Example.Fil
Note: The information contained in 'Progpath' must not be changed. Note:
No_Wrap No_Wrap
Declaration:
CONST No_Wrap : BOOLEAN = FALSE;
Explanation:
| If No_Wrap is set to false, the cursor wraparound feature is
controlled individually for each format by its global attribute
'Wraparound Ok'.
| In case No_Wrap is set to TRUE, this will override the appropriate
specifications and cursor wraparound will therefore be disabled for
all formats.
This Option has been provided to adapt SCL written applications SCL
easily to 'Mouse' operation.
| If a program is operated with a keyboard Cursor Wraparound can be
very helpful, especially on large formats. On the other hand , if a
| 'Mouse' is being used, Cursor Wraparound can be very confusing.
| No_Wrap allows to choose the optimum in both cases.
Chapter III, Screen Control Language page 114 Chapter III, Screen Control Language page 114
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Pointers Format Pointers
S_Ptr S_Ptr
Declaration:
VAR S_Ptr : INTEGER;
Explanation:
S_Ptr controls the format stack and always points to its top, i.e to
the currently active format. If a format is loaded to the Heap by
| Select_Format, S_Ptr is incremented and once the format is finished
| it is decremented by Format_Done.
| If S_Ptr is 0 (zero) after Format_Done has decremented it this means
that all formats have been finished and the screen is therefore
cleared.
Other values indicate that there are still one or more formats on the
| stack which have not yet been finished. The one S_Ptr is now pointing
to is therefore restored and its handling can continue where it was
interrupted before.
Note: For more details on the above matter refer to 'SCL Procedures Note:
and functions' later in this manual.
R_Ptr R_Ptr
Declaration:
VAR R_Ptr : INTEGER;
Explanation:
| R_Ptr is a Variable mainly used by the routines R_Cont, G_Cont, R_Sel
| and G_Sel.
It points to the format to be read from. R_Ptr is adjusted equal to
| S_Ptr by the routine Handle_Format. This means, R_Ptr will still
point to a format, even if this format is not any longer active.
For a detailed description of this mechanism refer to the description
of the above mentioned procedures.
Chapter III, Screen Control Language page 115 Chapter III, Screen Control Language page 115
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
W_Ptr W_Ptr
Declaration:
VAR W_Ptr : INTEGER;
Explanation:
| W_Ptr is mainly used by the routines W_Cont, C_Cont and W_Sel. It
points to the format currently being written to W_Ptr is normally
| equal to S_Ptr. This means that Format fields can be written into as
| soon as the format has been loaded by Select_Format and as long as it
| has not been finished by Format_Done.
For a detailed description of this mechanism see Appendix A.
Chapter III, Screen Control Language page 116 Chapter III, Screen Control Language page 116
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Handling Parameters Format Handling Parameters
| Many of the following parameters are intended to be used in User
| Interrupt Procedures during format handling. Detailed descriptions
and examples of user interrupt handling procedures can be found in
Appendix A.
Active_Field Active_Field
Declaration:
VAR Active_Field : INTEGER;
Explanation:
Active_Field always points to the field being processed by
| Handle_Format. If a format has no fields, 'Active_Field' is equal to
0 (zero).
This Variable can be interrogated by user procedures, typically
| during User Interrupt handling.
Char_Code Char_Code
Declaration:
VAR Char_Code : INTEGER;
Explanation:
Char_Code contains the input character last fetched from the
keybuffer by Handle_Format. Handle_Format
User interrupt procedures can interrogate or modify 'Char_Code'. If,
for example in case of a User Function Key Interrupt the statement User Function Key Interrupt
'Char_Code:=Code_Noop' is executed, Handle_Format then ignores this
key.
Glb_Error Glb_Error
Declaration:
VAR Glb_Error : INTEGER;
Explanation:
This Variable is used by external procedures normally invoked by User User
Interrupts to return an error description to 'Handle_Format'. Interrupts
In case the external procedure returns a value other than 0
'Handle_Format' initiates an error routine using the error message to
which 'Glb_Err' points.
Chapter III, Screen Control Language page 117 Chapter III, Screen Control Language page 117
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Handling Parameters Format Handling Parameters
The following variables are intended to be interrogated by user
written SCL interrupt handling procedures to determine the type of
interrupt having occurred. They are all controlled by the procedure
Handle_Format. Handle_Format
Refer to Appendix A for more details on how to use them.
User_Function User_Function
Declaration:
VAR User_Function : BOOLEAN;
Explanation:
This variable is TRUE whenever either a User Function Key was User Function Key
depressed or any other key was hit during input to a field with the
'CharInt' parameter set to TRUE.
For details on the above mentioned parameters refer to 'Format
Specifications' in the SFD part of this manual. SFD
Begin_Of_Field Begin_Of_Field
Declaration:
VAR Begin_Of_Field : BOOLEAN;
Explanation:
This variable is TRUE whenever a new field is due to be entered.
End_Of_Field End_Of_Field
Declaration:
VAR End_Of_Field : BOOLEAN;
Explanation:
This variable is TRUE whenever a field is due to be left and after
all SCL internal checks specified for the appropriate field have been
successfully completed.
Chapter III, Screen Control Language page 118 Chapter III, Screen Control Language page 118
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
End_Of_Format End_Of_Format
Declaration:
VAR End_Of_Format : BOOLEAN;
Explanation:
This variable is TRUE whenever a format is due to be left and after
all SCL internal checks have been successfully completed. Please
notice that the Abort feature bypasses this interrupt. Abort
Checkrequired Checkrequired
Declaration:
VAR Checkrequired : Boolean;
Explanation:
At the time of a End_Of_Field interrupt, 'checkrequired' is true if End_Of_Field
the field has been changed and false if it hasn't. 'Checkrequired'
should be interrogated by an external field input check procedure to
find out whether a check has to be done or not. For further
information see Appendix A under 'User Interrupt Procedures'.
Chapter III, Screen Control Language page 119 Chapter III, Screen Control Language page 119
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Screen related Parameters Screen related Parameters
The following variables can be interrogated by user programs but
should always be left unchanged.
Screen_Mode Screen_Mode
Declaration:
VAR Screen_Mode : Byte;
Explanation:
Screen_Mode holds information about what display adapter the computer
is currently working with and what mode it is in. Since SCL only
works in 80 column text mode, the possible values of Screen_Mode and Screen_Mode
their meaning are:
2 : CG Adapter; 80 Columns Text ; No Color.
3 : CG Adapter; 80 Columns Text ; With Color.
7 : Monochrome (or Hercules) Adapter; 80 Columns Text.
Mono_Adapter Mono_Adapter
Declaration:
VAR Mono_Adapter : BOOLEAN;
Explanation:
Mono_Adapter is true whenever the computer is using the Monochrome
Adapter.
The status of 'Mono_Adapter' decides to which display memory address
SCL writes.
Color_True Color_True
Declaration:
VAR Color_True : BOOLEAN;
Explanation:
Color_True is set if Screen_Mode is equal to 3. Screen_Mode
The status of Color_True determines which set of field attributes is
to be used.
Chapter III, Screen Control Language page 120 Chapter III, Screen Control Language page 120
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format related Parameters Format related Parameters
Xoff Xoff
Declaration:
VAR Xoff : INTEGER;
Explanation:
Xoff holds the horizontal offset of the currently active format. If
for example Xoff is equal to 5, then the upper left corner of the
currently active format starts at column 6 on the screen.
Yoff Yoff
Declaration:
VAR Yoff : INTEGER;
Explanation:
Yoff holds the vertical offset of the currently active format. If for
example Yoff is equal to 3, then the upper left corner of the
currently active format starts at row 4.
Chapter III, Screen Control Language page 121 Chapter III, Screen Control Language page 121
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Background Processing Parameters Background Processing Parameters
LP_Background_Pointer LP_Background_Pointer
Declaration:
VAR LP_Background_Pointer : POINTER;
Explanation:
This Variable is a pointer to the procedure to be invoked by SCL as
the low priority background task.
Example: Example
The following statement would cause SCL to perform Myproc as
background task:
LP_Background_Pointer:=@Myproc;
HP_Background_Pointer HP_Background_Pointer
Declaration:
VAR HP_Background_Pointer : POINTER;
Explanation:
This Variable is a pointer to the procedure to be invoked by SCL as
the high priority background task.
Example:
The following statement would cause SCL to perform Myproc as high
priority background task:
HP_Background_Pointer:=@Myproc;
Note: SCLs background tasking feature is explained in detail in Note:
Appendix A.
Chapter III, Screen Control Language page 122 Chapter III, Screen Control Language page 122
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Miscellaneous Parameters Miscellaneous Parameters
Glb_Status Glb_Status
Declaration:
VAR Glb_Status : INTEGER;
Explanation:
This Variable is a status count controlling the procedure
'Handle_Format' and carries Information about the present status of
the format handling process. There is normally no need to interrogate
Glb_Status itself, since SCL provides a comprehensive set of Boolean Glb_Status SCL
variables for this purpose. Please refer to 'Format Handling
Parameters' for details.
Glb_Status should not be changed by user routines.
Glb_Ok Glb_Ok
Declaration:
VAR Glb_Ok : BOOLEAN;
Explanation:
Glb_Ok is set to FALSE by some SCL procedures and functions to flag
errors during their execution. It can be interrogated by user
programs to make sure that these procedures did not encounter
problems during their execution. Details of the conditions under
which Glb_Ok is set to FALSE can be found in the descriptions of the
appropriate procedures and functions.
Format_Aborted Format_Aborted
Declaration:
VAR Format_Aborted : BOOLEAN;
Explanation:
A boolean variable which is set to TRUE by the procedure
Handle_Format to indicate to succeding procedures that a format has Handle_Format
been terminated via the Abort key and that they should therefore Abort key
ignore the data having been entered so far into this format (and
which is likely to be incomplete, anyway).
Chapter III, Screen Control Language page 123 Chapter III, Screen Control Language page 123
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Global Type Declarations Global Type Declarations
The following SCL TYPE declarations are not limited to SCL, they are TYPE
of rather universal use in a TURBO PASCAL program and can be used in
other parts of the application program as well. More type
declarations inluding the declarations for the SCL files can be found SCL
in the file SCL.DOC.
TYPE String128: STRING[128];
TYPE String80 : STRING[80];
TYPE String70 : STRING[70];
TYPE String40 : STRING[40];
TYPE String20 : STRING[20];
TYPE String13 : STRING[13];
TYPE String10 : STRING[10];
Chapter III, Screen Control Language page 124 Chapter III, Screen Control Language page 124
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Procedures and Functions Procedures and Functions
Introduction Introduction
The following chapters describe all SCL procedures and functions
intended to be accessed by user programs in logical sequence. While
the routines described here actually only represent a small fraction
of the total number of the SCL routines being available, they will
enable you to perform all necessary operations.
If you are an experienced SCL programmer, you may come along a
occasion where you want to access a low level routine directly for
some reason.
While nothing is actually preventing you from doing so, you should
take extreme care not to interfere with SCL. In addition, be aware
that most of these low level routines are, usually for performance
reasons, not protected against invalid parameters and may therefore
cause runtime errors if you pass such data to them.
As a general rule, don't use any undocumented SCL routines unless you As a general rule, don't use any undocumented SCL routines unless you
really know exactly what you are doing. really know exactly what you are doing.
Note: In Appendix B you can find a complete alphabethic list of all Note:
SCL routines together with brief comments on their purpose and
restrictions.
Chapter III, Screen Control Language page 125 Chapter III, Screen Control Language page 125
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Entering and leaving SCL Entering and leaving SCL
PROCEDURE Select_Format_File(Filename:String10); PROCEDURE Select_Format_File(Filename:String10);
This procedure should be the first SCL routine performed in a
program.
It first checks the present screen mode to ensure that it is one of
the 80 character text modes.
Then it opens the screenfile indicated by 'Filename' (<Filename>.SCS)
as well as the Index file (<Filename>.SCI) belonging to it.
The index file is checked in order to ensure that it is sorted. Then
the field message file (<Filename>.MSG and, if available, the error
message file (<Filename>.ERR) are loaded into the Heap. Finally some
SCL variables are initialized and the screen is cleared.
If errors are encountered during this process, SCL halts the program
and displays a message indicating the reason for the abort.
Note: The parameter 'Filename' must be specified without extension. Note:
It is recommended to set the screen mode to the desired value using
the Turbo Pascal Construct 'TextMode' before SCL is initialized since
SCL aborts the program if the mode is wrong.
PROCEDURE Close_Formats; PROCEDURE Close_Formats;
This procedure is the last SCL routine to be performed in a program.
It frees all space previously occupied by SCL in the Heap, closes the Heap
screen files, clears the screen and finally restores the cursor to
its normal shape.
On the next page you find an example of the basic skeleton of a
program using SCL routines.
Chapter III, Screen Control Language page 126 Chapter III, Screen Control Language page 126
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Structure of a SCL Program Structure of a SCL Program
PROGRAM EXAMPLE;
USES SCL; {make SCL accessible}
{User declarations,
procedures and functions }
BEGIN; {of main body of program example}
Select_Format_File('exforms'); {This is the first SCL statement
in any program. It loads the
necessary files and initializes
SCL.}
{main program}
Close_Formats; {Last SCL statement in any program.
It closes all SCL files and clears the screen}
END; {of main body of program example}
Chapter III, Screen Control Language page 127 Chapter III, Screen Control Language page 127
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Loading and displaying formats Loading and displaying formats
PROCEDURE Select_Format(Fname:String10); PROCEDURE Select_Format(Fname:String10);
Select_Format is the first procedure to be called in order to display
and handle a format.
It reads the description of the format indicated by 'Fname' from the
format file and loads it into memory.
If another format is currently being processed and not yet finished,
its status is saved in the stack for later recovery once 'Fname' has
been finished.
Since 'Select_Format' modifies the 'W_Ptr' to point to the new
format, its fields can now be 'prefilled' if necessary.
PROCEDURE Display_Format(Xoffset,Yoffset:INTEGER); PROCEDURE Display_Format(Xoffset,Yoffset:INTEGER);
Once a format has been 'selected' using procedure 'Select_Format' it
is displayed on the screen with 'Display_Format'. In addition to
display the format, all its fields are initialized according to their
specifications and the cursor is placed into the first accessible
field (Cursor Home). If there is no field on the format, the cursor
is made invisible.
Display_Format requires two parameters: Xoffset and Yoffset. They
define where on the screen the upper left corner of the new format is
to be positioned. Both values are zero based, since they specify
offsets counted from the upper left corner of the screen rather than
absolute positions. Therefore if for example Xoffset is specified as Xoffset
'10' and Yoffset as '0' the format will be displayed with it's upper
left corner at Row 1 (the first row), Column 11.
Example: Example
PROCEDURE Bring_Up_Myformat;
BEGIN;
Select_Format('Myformat'); {Loads 'Myformat' into Memory}
Display_Format(0,0); {displays it starting at the upper left}
END; {corner of the screen}
Chapter III, Screen Control Language page 128 Chapter III, Screen Control Language page 128
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Note: It is user responsibility to ensure that the space specified Note:
by Xoffset and Yoffset is large enough to hold the format to be Xoffset Yoffset
displayed.
If the space specified is found to be to small, a 'Fatal Error'
halting the program will result.
Therefore it is recommended to preferably use the functions 'X_Max'
and 'Y_Max' wherever possible to specify offsets.
For details see overleaf.
Chapter III, Screen Control Language page 129 Chapter III, Screen Control Language page 129
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
X_Max and Y_Max X_Max and Y_Max
FUNCTION X_Max:INTEGER; FUNCTION X_Max:INTEGER;
Returns a value equal to 80 the width of the currently selected
format. This function is intended to be used together with the
'Display_Format' Procedure.
FUNCTION Y_Max:INTEGER; FUNCTION Y_Max:INTEGER;
Returns a value equal to 25 the height of the currently selected
format. This function is intended to be used together with the
'Display_Format' Procedure.
Examples: Examples
Display_Format(X_Max,1); Display_Format(X_Max,1);
Displays the format in the upper right corner of the screen.
Display_Format(X_Max div 2,Y_Max); Display_Format(X_Max div 2,Y_Max);
Displays the format on the bottom of the screen and horizontally
centered.
Display_Format(1,Y_Max); Display_Format(1,Y_Max);
Displays the format in the lower left corner of the screen.
Display_Format(X_Max div 2,Y_Max div 2); Display_Format(X_Max div 2,Y_Max div 2);
Displays the format centered on the screen.
Display_Format(X_Max-3,Y_Max -2); Display_Format(X_Max-3,Y_Max -2);
Displays the format wit it's lower right corner positioned on line
23, column 77.
Chapter III, Screen Control Language page 130 Chapter III, Screen Control Language page 130
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Handling format input Handling format input
PROCEDURE Handle_Format; PROCEDURE Handle_Format;
This routine can be seen as the kernel of the SCL System. It's basic
purpose is to obtain keyboard input and act upon it. Besides this, it
also manages a variety of other important functions such as:
* Cursor control.
* Input checks according to field specifications and display of
error messages.
* Display of Help screens and explanatory messages.
* Formatting and display of field input.
* Control of field attributes according to specifications.
* User interrupt recognition and handling.
* Invoking of background tasks.
Note: 'Handle_Format' is always called in form of a REPEAT....UNTIL Note: REPEAT....UNTIL
loop. An example is given at the end of the description of
'Format_Done' on the next page.
FUNCTION Format_Done:BOOLEAN; FUNCTION Format_Done:BOOLEAN;
This Function is used together with the procedure 'Handle_Format'
described above in a REPEAT....UNTIL Loop. REPEAT....UNTIL
It checks whether the format currently being handled is finished and,
if this is the case, it then terminates it.
This means:
It also sets the color of the first and last line as well as the
first and last column of the format to Backgroundcolor if it was Backgroundcolor
highlighted before (see 'Display_Format').
It then it checks for the presence of another format waiting on the
stack to be reactivated (one which had not been finished before) and,
if this is the case, restores the parts of the screen which had been
overwritten. Then all pointers are adjusted to this format and its
handling is carried out from where it was
interrupted before. If there was no format waiting on the stack to be
reactivated, the screen is then cleared.
Note: The complete principle of SCL's format stacking is described Note:
in Appendix A (Sample 3).
Chapter III, Screen Control Language page 131 Chapter III, Screen Control Language page 131
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example: Example
REPEAT
HANDLE_FORMAT;
{Here optional User Interrupt handling
statements could be inserted}
UNTIL FORMAT_DONE;
The above represents the basic construct of any SCL format input
handling procedure.
The REPEAT....UNTIL loop will be left as soon as the (boolean) REPEAT....UNTIL
function 'Format_Done' detects that the format had been finished (In
this case, 'Format_Done' returns TRUE).
Whenever a User Specified Interrupt (see under 'Format User Specified Interrupt
Specifications' in the SFD part of this manual) comes up, the SFD
procedure 'Handle_Format' is exited and the user is given the chance
to take over control via appropriate statements within the
REPEAT....UNTIL loop as indicated in the above example. Since REPEAT....UNTIL
'Format_Done' always returns FALSE as long as the format is not
finished, 'Handle_Format' will be reentered once the user specified
procedures have been performed.
Note that due to this construction the specification of user
interrupt handling procedures is optional; even if interrupts have
actually been specified for the appropriate format.
Chapter III, Screen Control Language page 132 Chapter III, Screen Control Language page 132
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Format Handling Control Format Handling Control
PROCEDURE Blank_Format; PROCEDURE Blank_Format;
This procedure causes the space the currently handled format occupies
on the screen to be cleared (filled with spaces).
PROCEDURE Goto_Field(Fieldnr:INTEGER): PROCEDURE Goto_Field(Fieldnr:INTEGER):
This Procedure can be used during in a User Interrupt Procedure User Interrupt Procedure
(End_of_Field) to jump to another field on the format. It is your
responsibility to make sure that the field number to jump to is valid
and not declared as Output Only. Output Only
PROCEDURE Finish_Format(Check:BOOLEAN); PROCEDURE Finish_Format(Check:BOOLEAN);
This procedure is used to terminate the currently displayed format
while it is being processed by 'Handle_Format', usually depending on
a condition being checked within a User Interrupt Procedure. It User Interrupt Procedure
causes 'Handle_Format' to react in exactly the same way as if an
appropriate keyboard key would have been pressed.
Terminate_Format requires a boolean argument which decides in what
way the format is to be finished.
If 'Check' is FALSE, it will be terminated unconditionally in a
similar way as if the 'ABORT' key would have been pressed. If 'Check'
is true, 'Handle_Format' will react as if 'ESCape' would have been
pressed. This means, before actually terminating the format it is
checked whether all mandatory fields are filled in and the
termination is refused if this should not be the case.
Notes: Terminating a format unconditionally with the above procedure Notes:
works even in case Abort_OK is set to FALSE for this format. Please Abort_OK
remark also, that Format_Aborted is not set to TRUE. Format_Aborted
Detailed examples of how to handle formats including User Interrupt User Interrupt
Procedures can be found in Appendix A under 'SCL Programming Procedures
examples'.
Chapter III, Screen Control Language page 133 Chapter III, Screen Control Language page 133
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Reading/Writting Format Fields Reading/Writting Format Fields
Introduction Introduction
In order to read and write both the (boolean) status of the
'selected' attribute as well as the actual content of format fields
several SCL routines are provided.
The following routines serve to access the field content: The following routines serve to access the field content:
R_Cont: R_Cont:
'Read field content'. A procedure to read the content of a field into
a string variable.
G_Cont: G_Cont:
'Get field content'. Similar to above, but in form of a function.
W_Cont: W_Cont:
'Write field content'. A procedure to write the content of a string
variable to a field.
C_Cont: C_Cont:
'Clear field content'. A procedure to clear a field i.e to fill it's
content with spaces).
| The following routines serve to access the Selecte attribute of The following routines serve to access the Selecte attribute of
format fields: format fields:
R_Sel: R_Sel:
'Read field selected status'. A procedure to read the status of the
'selected' attribute into a boolean variable.
G_Sel: G_Sel:
'Get field selected status'.Similar to 'R_Sel' but in form of a
boolean function.
W_Sel: W_Sel:
'Write field selected status'. Sets the status of the 'selected'
attribute to the desired value.
Note: A detailed description of these routines can be found on the Note:
following pages.
Chapter III, Screen Control Language page 134 Chapter III, Screen Control Language page 134
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Reading Field Content Reading Field Content
PROCEDURE R_Cont(Fieldnr:INTEGER; VAR Contents:String80); PROCEDURE R_Cont(Fieldnr:INTEGER; VAR Contents:String80);
This procedure acts on the format pointed to by 'R_Ptr'.
It reads out the content of field 'Fieldnr' and puts it left
justified into 'Contents'. Note that the content of the field is
always returned in form of a string, even in the case of numeric
variables.
In case the value in 'Fieldnr' does not represent a valid field or
'R_Ptr' does not point to a valid format an empty string (length = 0)
is returned and 'Glb_Ok' is set to FALSE.
Example: R_Cont(2,Mystring); Example: R_Cont(2,Mystring);
The content of the second field of the format pointed
to by 'R_Ptr' is returned in 'Mystring'.
Note: R_Ptr normally either points to the format in process or to Note:
the one that was last processed by 'Handle_Format'.
Therefore, as long as 'Handle_Format' has not been performed on a new
format, the last one is still accessible, even after it is 'finished'
(in this case however only as long as no new format has been loaded
with 'Select_Format').
If no format has been processed yet or if the format last having been
processed was overwritten by a new one (it was finished and
'Select_Format' has been called) 'R_Ptr' contains 0 (Zero) and any
attempt to read a field now would result in in a 'Fatal SCL Error'
halting the program.
For detailed information on the above refer to Appendix A.
FUNCTION G_Cont(Fn:INTEGER):String80; FUNCTION G_Cont(Fn:INTEGER):String80;
This Function calls the procedure 'R_Cont'.
Therefore the statement Mystring:=G_Cont(2) is equivalent to
R_Cont(2,Mystring).
The use of 'G_Cont' instead of 'R_Cont' often leads to more elegant
constructs and better readable programs. It can also save in many
cases the declaration of local variables.
The two (functionally identical) examples on the next page may
illustrate this.
Chapter III, Screen Control Language page 135 Chapter III, Screen Control Language page 135
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Examples for R_Cont and G_Cont Examples for R_Cont and G_Cont
Example 1 (using R_Cont): Example 1 (using R_Cont):
PROCEDURE Read_Format;
VAR
Wrkstr:String80; {TYPE String80 is defined as STRING[80]}
BEGIN;
R_Cont(1,Surname); {Read the content of field 1 to 'Surname'}
R_Cont(2,Forename); {Field 2 to 'Forename'}
R_Cont(3,Wrkstr); {Field 3 to 'Wrkstr'}
City:=Capital(Wrkstr); {Change 'Wrkstr' to upper case and} END;
{store it in 'City'.}
Example 2 (using G_Cont): Example 2 (using G_Cont):
PROCEDURE Read_Format;
BEGIN;
Surname :=G_Cont(1); {Read the content of field 1
into 'Surname'}
Forename:=G_Cont(2); {Field 2 to 'Forename'}
City:=Capital(G_Cont(3)); {Field converted to uppercase and END;
{stored in 'City'.}
Chapter III, Screen Control Language page 136 Chapter III, Screen Control Language page 136
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Writing Field Content Writing Field Content
PROCEDURE W_Cont(Fieldnr:INTEGER;Cont:String80); PROCEDURE W_Cont(Fieldnr:INTEGER;Cont:String80);
This procedure works on the format pointed to by 'W_Ptr'.
It writes the string 'Cont' to the field indicated by 'Fieldnr'. If
'Fieldnr' doesn't point to a valid field no action is performed and
'Glb_Ok' is set to FALSE.
If 'Cont' does not completely fit into the field it is cut off at the
appropriate length and 'Glb_Ok' is set to false as well. Note that
since W_Cont expects a string value, numeric information has to be W_Cont
converted first.
In case the format being written to is currently displayed, the
appropriate field content is changed on the screen as well.
Example: Example:
PROCEDURE Prefill;
VAR
Wrkstr : String80;
A_String : String80; {Info to be written to field 1}
A_Real_Number : REAL; {Info to be written to field 2}
A_Integer_Number : INTEGER; {Info to be written to field 3}
BEGIN;
A_String :='This is a string'; {Initialize}
A_Real_Number :=1.234; {our silly }
A_Integer_Number:=67; {examples }
W_Cont(1,A_String); {Writes 'A_String' to field 1}
STR(A_Real_Number,Wrkstr); {Converts it to a string...}
W_Cont(2,Wrkstr); {...and writes it to field 2}
W_Cont(3,St(A_Integer_Number); {uses the SCL Function 'St'..} END;
{..to convert it to a string and writes it to field 3.}
{Note:'St' can only be used to convert 'INTEGER values}
Note: W_Ptr is initially set by the procedure 'Select_Format' and Note:
keeps on pointing to this format until it is finished. Detailed
information on 'W_Ptr' can be found in Appendix A.
Chapter III, Screen Control Language page 137 Chapter III, Screen Control Language page 137
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Deleting Field Content Deleting Field Content
PROCEDURE C_Cont(Fieldnr:INTEGER); PROCEDURE C_Cont(Fieldnr:INTEGER);
This procedure 'clears' the field indicated by 'Fieldnr'. It is
equivalent to: W_Cont(Fieldnr,' '). Everything having been said under W_Cont(Fieldnr,' ')
'W_Cont' applies to 'C_Cont' as well.
Example: Example:
C_Cont(1); {Clears field 1, i.e. writes spaces to it.}
Chapter III, Screen Control Language page 138 Chapter III, Screen Control Language page 138
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Reading the 'Selected' Attribute Reading the 'Selected' Attribute
PROCEDURE R_Sel(Fieldnr:INTEGER; VAR Sel:BOOLEAN); PROCEDURE R_Sel(Fieldnr:INTEGER; VAR Sel:BOOLEAN);
This procedure acts on the format pointed to by R_Ptr.
This procedure returns in 'Sel' the status of the Selected attribute Selected
of the field identified by 'Fieldnr'.
In case the value in 'Fieldnr' does not represent a valid field or
'R_Ptr' is not pointing to a valid format 'Glb_Ok' is set to FALSE.
For further information on 'R_Ptr' refer to the description of
'R_Cont'.
Example: Example:
R_Sel(2,Status); R_Sel(2,Status);
After performing this operation, 'Status' will be TRUE if the second
field of the format pointed to by 'R_Ptr'is Selected. Selected
FUNCTION G_Sel(Fn:INTEGER):BOOLEAN; FUNCTION G_Sel(Fn:INTEGER):BOOLEAN;
This function calls the procedure R_Sel.
Therefore the construct Status:=G_Sel(2) is equivalent to
R_Sel(2,Status).
In many cases, the use of 'G_Sel' in favour of 'R_Sel' can not only
save the declaration of local variables but also allow more elegant
constructs. The following two (functionally identical) examples
illustrate this.
Example 1 (using R_Sel): Example 1 (using R_Sel):
R_Sel(1,Mrs);
R_Sel(2,Miss);
Female:= Mrs or Miss;
Example 2 (using G_Sel): Example 2 (using G_Sel):
Female:=Gsel(1) or gsel(2);
Chapter III, Screen Control Language page 139 Chapter III, Screen Control Language page 139
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Writing the 'Selected' Attribute Writing the 'Selected' Attribute
PROCEDURE W_Sel(Fieldnr:INTEGER;Sel:BOOLEAN); PROCEDURE W_Sel(Fieldnr:INTEGER;Sel:BOOLEAN);
This procedure works on the format pointed to by 'W_Ptr'.
It sets the 'Selected' attribute of the field indicated by 'Fieldnr'
to the boolean value of 'Sel'.
If 'Fieldnr' doesn't point to a valid field no action is performed
and 'Glb_Ok' is set to FALSE.
In case the format being written to is currently displayed, the
appropriate field is changed to reflect the status of the 'selected'
attribute on the screen as well.
Example: Example:
W_Sel(5,TRUE); {Marks Field 5 to be 'selected'}
Note: W_Ptr is initially set by the procedure 'Select_Format' and Note:
keeps on pointing to this format until it is finished. For detailed
information on 'W_Ptr' refer to Appendix A.
Chapter III, Screen Control Language page 140 Chapter III, Screen Control Language page 140
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
String Handling routines String Handling routines
FUNCTION Capital(Wrkstr: String): String; FUNCTION Capital(Wrkstr: String): String;
This function returns the input string converted to uppercase
letters.
Example: Example:
Mystring:=Capital(Mystring);
If Mystring was ' aBc' it becomes ' ABC'.
FUNCTION Stripleft(Wrkstr: String): String; FUNCTION Stripleft(Wrkstr: String): String;
Returns the input string with all leading spaces stripped off.
Example: Example:
Mystring:=Stripleft(Mystring);
If Mystring was ' ABC ' it becomes 'ABC '.
FUNCTION Stripright(Wrkstr: String): String; FUNCTION Stripright(Wrkstr: String): String;
Returns the input string with all trailing spaces stripped off.
Example: Example:
Mystring:=Stripright(Mystring);
If Mystring was ' ABC ' it becomes ' ABC'.
Chapter III, Screen Control Language page 141 Chapter III, Screen Control Language page 141
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE Strip(VAR Wrkstr:String;VAR Len:INTEGER); PROCEDURE Strip(VAR Wrkstr:String;VAR Len:INTEGER);
Removes all leading and trailing spaces from Wrkstr and returns it's
resulting length in len.
Example: Example:
Mystring:=' ABC ';
Strip(Mystring,Stlen);
After performing the above statements, Mystring equals 'ABC' and
Stlen equals 3.
FUNCTION Charstring(Whatchar:CHAR;Len:INTEGER):String; FUNCTION Charstring(Whatchar:CHAR;Len:INTEGER):String;
Returns a string of length = Len, completely filled with Whatchar.
Example: Example:
Mystring:=Charstring('A',5);
Mystring now contains 'AAAAA'.
PROCEDURE Frontstring(Str:String; VAR Head,Tail:String); PROCEDURE Frontstring(Str:String; VAR Head,Tail:String);
Returns the first word of 'Str' in 'Head' and the remainder in
'Tail'. In both cases, leading blanks are stripped off. Word
separators can be one or more blanks. If 'Str' only contains one
word, 'Tail' is returned with a length of 0 (zero).
Example: Example:
Var
S1,
S2 :String;
Begin;
Frontstring('This_is.a-Frontstring 'This_is the tail ',S1,S2);
End;
S1 now contains 'This_is.a-Frontstring' and S2 contains
'This_is the tail '.
Please notice that trailing spaces in the tail are not removed. Please notice that trailing spaces in the tail are not removed.
Chapter III, Screen Control Language page 142 Chapter III, Screen Control Language page 142
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
FUNCTION Justify_Left(STR:String;Len:INTEGER):String; FUNCTION Justify_Left(STR:String;Len:INTEGER):String;
Returns the input string justified left in a field of length Len. The
remaining part of the field is filled up with spaces.
If the input string was, after the leading and trailing spaces were
removed, still longer than len, it is cut off at len. In this case,
Glb_Ok is set to false.
Example 1 : Example 1 :
Mystring:=' abc ';
Mystring:=Justify_Left(Mystring,5);
After execution, Mystring is equal to 'abc '.
Example 2 : Example 2 :
Mystring:=' abc ';
Mystring:=Justify_Left(Mystring,2);
In this example, Mystring would be returned as 'ab' and Glb_Ok would
be false.
FUNCTION Justify_Right(STR:String;Len:INTEGER):String; FUNCTION Justify_Right(STR:String;Len:INTEGER):String;
Returns the input string justified left in a field of length Len.
with the part before the text being filled up with spaces. If the
input string without leading and trailing spaces is longer than len,
it is cut off at len. In this case, Glb_Ok is set to false.
Example 1: Example 1:
Mystring:=' abc ';
Mystring:=Justify_Right(Mystring,5);
This example returns Mystring = ' abc'.
Example 2: Example 2:
Mystring:=' abc ';
Mystring:=Justify_Right(Mystring,2);
Mystring would now be equal to 'ab' and Glb_Ok would be false.
Chapter III, Screen Control Language page 143 Chapter III, Screen Control Language page 143
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
FUNCTION Justify_Center(STR:String;Len:INTEGER):String; FUNCTION Justify_Center(STR:String;Len:INTEGER):String;
Returns the input string centered in a field of length Len. If the
input string without leading and trailing spaces is longer than Len,
it is cut off at Len. In this case, Glb_Ok is set to false.
Examples : Examples :
Mystring:=' abc ';
1. Mystring:=Justify_Center(Mystring,5);
This example returns Mystring = ' abc '.
2. Mystring:=Justify_Center(Mystring,1);
The value returned is 'a' and Glb_Ok is false.
Chapter III, Screen Control Language page 144 Chapter III, Screen Control Language page 144
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
System Functions System Functions
FUNCTION Environment(Name:String128):String128; FUNCTION Environment(Name:String128):String128;
This function returns the content of the specified line out of the
DOS Environment. For Details on the DOS Environment and how it can be DOS Environment
used refer to the description of the 'Set' command in your DOS
manual.
Example: Example:
Var Mystr:String;
BEGIN;
Mystr:=Environment('COMSPEC');
END;
Mystring contains now the complete path and name of your systems
primary command processor, for example 'C:/COMMAND.COM'.
PROCEDURE Execute(VAR Progstring:String80); VAR Result:INTEGER); PROCEDURE Execute(VAR Progstring:String80); VAR Result:INTEGER);
This Procedure executes the program specified by 'Progstring'. Once
this program has finished execution, control is returned to the
calling program (your application).
Since Execute does not read the settings of 'Path' or 'Environment', Execute
'Progstring' must contain, beside the actual program name, the
complete path description if the program to be executed is not in the
Active directory. In addition, 'Progstring' can optionally contain Active directory
one or more parameters. The program name extension (i.e '.EXE' or
'.COM' is optional. If no extension is specified, Execute will first Execute
look for a '.COM' and then, in case it is not found for a '.EXE'
file. The result of the operation are returned in DOSERROR and
DOSEXTCODE (see your Turbo Pascal Manual).
Example: Example:
Execute('C:\Myprog firstparam secondparam thirdparam');
{Fires up 'Myprog' with three parameters. Once 'Myprog' has finished,
control is passed back to your application. Note that no extension
for 'Myprog' has been specified in the above example. If 'Execute'
does not find an extension, it first tries '.COM' and if such a file
cannot be found, it then tries '.EXE'}
Note: See also the 'ExecuteDos' command. Note:
Chapter III, Screen Control Language page 145 Chapter III, Screen Control Language page 145
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE ExecuteDos(Command:String128); PROCEDURE ExecuteDos(Command:String128);
This procedure fires up the DOS command processor (usually
COMMAND.COM) and passes the string contained in 'Command' to it. The
command processor the acts upon this string in the same way as if it
had been entered on the normal DOS prompt.
Once the command has been executed, the command processor terminates
and control is passed back to your application. The results of the
operation are returned in DOSERROR and DOSEXITCODE (see turbo Pascal
4.0 Manual).
If 'Command' is an empty string (i.e a string with a length of 0) or
if it only contains blanks, the DOS Command processor is fired up and
remains active for input until it is terminated with the DOS Command
Exit (refer to your DOS Manual for details). Then control is passed Exit
back to your program.
Note: In addition to actual DOS commands there are also some other Note:
programs which require COMMAND.COM to be running in order to execute
properly. This applies particularly to many external commands (for
example CHKDSK.COM) but also to all kind of batch file processing.
Such tasks must therefore be started up using 'ExecuteDos' rather
than 'Execute'.
An important restriction for both 'Execute' and 'ExecuteDos' is the
fact that they only work if the application program has been compiled
to disk. In addition you must make sure that enough memory has been
left over for the programs to be executed. In order to achieve this
you must limit the Maximum free dynamic memory value (the 'A' Maximum free dynamic memory
selection on TURBO PASCALS 'Option' menu) to an appropriate value
prior to compiling your program. The value to choose cannot be
exactly determined, it very much depends on your program. Crude
guidelines can be found in Appendix A.
Examples: Examples:
ExecuteDos('Dir a:*.*') ExecuteDos('Dir a:*.*')
{Loads the command processor and passes 'Dir a:*.*' to it. Once the
'Dir' command has been performed, the command processor terminates
and control is passed back to your program.}
ExecuteDos(''); ExecuteDos('');
{Invokes DOS including the familiar prompt. You can now enter any
commands you want. 'Exit' returns you to your program.
Note: For further examples of the above constructs refer to Appendix Note:
A.
Chapter III, Screen Control Language page 146 Chapter III, Screen Control Language page 146
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Date related routines Date related routines
Most of the following routines apply the specifications being
contained in the DOS Country Information for date formatting. This DOS Country Information
offers the tremendous advantage that the appropriate routines in
your program never have to be changed, independant of the country the
program is used in.
For more details on this matter please refer to the Appendix A.
FUNCTION Date:String10; FUNCTION Date:String10;
Returns the system date in form of a string. Both its format, i.e
MMDDYY or DDMMYY, and the delimiters being used are obtained and
automatically set according to the Country Information SCL has been Country Information SCL
told to use. By default, SCL assumes the country specified in the SCL
file 'CONFIG.SYS'. There are several possibilities to influence or
override this selection within SCL, for details refer to Appendix A. SCL
Assuming the Country is UK (Country = 44) 'Date' returns a string of
the form 'DD-MM-YY', in the case of Germany (Country = 49) it would
be 'DD.MM.YY' and for USA (Country = 1) the format would be 'MM-DD-
YY'.
FUNCTION Date_String(Y,M,D:WORD):String10; FUNCTION Date_String(Y,M,D:WORD):String10;
This function returns the date passed to it as integers (Y,M and D)
in form of a string. Everything having been said above for the
function 'Date' applies to 'Date_String' as well. Date_String accepts
the year in both 2 and 4 digit format.
Chapter III, Screen Control Language page 147 Chapter III, Screen Control Language page 147
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE Check_Date(VAR Date_Str:String10; VAR Y,M,D:WORD); PROCEDURE Check_Date(VAR Date_Str:String10; VAR Y,M,D:WORD);
'Check_Date' converts 'Date_Str' into three integers values Y,M and
D. 'Date_Str' must contain a valid date in the format DD-MM-YY or
MM-DD-YY, depending on the Country Information being used (see Country Information
above). The separators can be any non numerical characters. Leading
zeroes can be omitted. The year can be entered either in full (as for
example '1987') or as a 2 digit number (as '87').
The date in 'Date_Str' is checked for validity and, if it is found to
be invalid, 'Glb_Ok' is set to false.
FUNCTION Weekday(Y,M,D:WORD):INTEGER; FUNCTION Weekday(Y,M,D:WORD):INTEGER;
'Weekday' calculates the day of the week for the date passed to it in
Y,M and D. The day of the week is returned in form of an Integer
number. The meanings are: 0=Sunday, 1=Monday and so on. Please notice
that if the year is passed to this function as a 2 digit value 1900
is added to it. Therefore this routine cannot be used for years below
100 A.D.
FUNCTION Julian_Date(VAR Y,M,D:WORD):REAL; FUNCTION Julian_Date(VAR Y,M,D:WORD):REAL;
This function returns the date passed to it in Y,M,D in form of a
number of days since 1.Jan 00 A.D. The value passed back is in form
of a REAL number. Julian_Date can be ideally used to calculate the
number of days between two dates. If 'Y' contains a value less than
100, 1900 is added to it. Therefore this routine can not be used for
any year below 100 A.D.
PROCEDURE Normal_Date(VAR Julian:REAL;VAR Y,M,D:WORD); PROCEDURE Normal_Date(VAR Julian:REAL;VAR Y,M,D:WORD);
Normal_Date is the counterpart of 'Julian_Date' above, i.e it
converts a Julian date passed to it into three Integer Values Year,
Month and Day.
Note: For examples on how to use the above routines please refer to Note:
Appendix A.
Chapter III, Screen Control Language page 148 Chapter III, Screen Control Language page 148
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Time related Routines Time related Routines
FUNCTION Time(Seconds:BOOLEAN):String10; FUNCTION Time(Seconds:BOOLEAN):String10;
'Time' returns the system time (24 hour based) in form of a string.
If 'Seconds' is TRUE, this string has the format HH:MM:SS, otherwise
it is HH:MM. The separators being used (in the above example ':')
depends on the Country Information and can therefore be different Country Information
depending on the country. Refer to Appendix A for details.
FUNCTION Time_String(H,M,S:WORD):String10; FUNCTION Time_String(H,M,S:WORD):String10;
'Time_String' converts the time passed to it in H,M and S to a string
of the form 'HH:MM:SS'. Leading blanks are replaced by '0'.
Everything having been said under 'Time' regarding separators
applies to this function as well.
In order to obtain a time string without seconds the following
construct may be used:
Mystring:=COPY(Time_String(H,M,S),1,5);
PROCEDURE Check_Time(VAR Time_Str:String10; VAR H,M,S : WORD); PROCEDURE Check_Time(VAR Time_Str:String10; VAR H,M,S : WORD);
Converts the value in 'Time_Str' to three Integers and checks it for
validity. If the check does not succeed, 'Glb_Ok' is set to false.
The string passed in 'Time_Str' must have one of the following
formats:
'HH:MM:SS' or 'HH:MM'. Leading zeroes can be omitted. Separators can
be any non numerical characters. Hours are assumed to be based on the
24 hour format.
Chapter III, Screen Control Language page 149 Chapter III, Screen Control Language page 149
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Background Processing Tasks Background Processing Tasks
SCL is capable to perform user written routines as Background tasks. Background tasks
There are two different hooks for Background Tasks provided in SCL, Background Tasks
one for low priority and the other for high priority work.
The High priority background task is unconditionally performed by SCL
every time it goes through the internal loop of 'Handle_Format'
(Whenever SCL waits for keyboard input it is idling in this loop).
The low priority background task is identical except that it is only
performed when no other tasks are pending, i.e. there is no keyboard
input waiting to be processed and no screen updates are required.
In order to declare a user written routine (Procedure) to be
performed as a background task by SCL all you need is to include one
of the following two statements in the program:
LP_Background_Pointer:=@<Procedurename>;
{this will cause SCL to execute <Procedurename> as a Low
Priority background task}
or
HP_Background_Pointer:=@<Procedurename>
{SCL will execute <Procedurename> as a High priority
Background Task}
Note: Please notice that background procedures must be compiled with Note:
the 'Force Far Calls' Compiler Option.
More details on Background tasks can be found in the explanation of
SAMPLE4 distributed in Appendix A.
Chapter III, Screen Control Language page 150 Chapter III, Screen Control Language page 150
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Other Routines Other Routines
FUNCTION St(I:INTEGER):String80; FUNCTION St(I:INTEGER):String80;
Returns an Integer number converted to a string. This function is
especially useful to write numeric values to format fields.
Example: Mystring:=St(15) returns '15' in Mystring. Example
FUNCTION Rst(R:REAL;Decimals:INTEGER):String80; FUNCTION Rst(R:REAL;Decimals:INTEGER):String80;
Returns an Real number converted to a string. Decimals must contain
the number of positions to be shown after the decimal point.
Example: Mystring:=Rst(3.55555,2) returns '3.56'. Example
FUNCTION Nr(St:String80) : INTEGER; FUNCTION Nr(St:String80) : INTEGER;
Converts a string into an Integer number. 'St' must be a string
expressing an integer value. If 'St' does not epress an Integer value
according to the rules for numeric constants then 'Nr' returns 0
(zero) and Glb_Ok is set to false.
This function is mainly intended to read numeric format fields into
integer variables.
Example: My_Integer_Number :=Nr(G_Var(2)); Example
FUNCTION Rnr(St:String80) : REAL; FUNCTION Rnr(St:String80) : REAL;
Converts a string into an Real number. 'St' must be a string
expressing a valid real value. If 'St' does not epress a Real value
according to the rules for numeric constants then 'Rnr' returns 0
(zero) and Glb_Ok is set to false.
This function is mainly intended to read the contents of numeric
format fields into 'Real' variables.
Example: My_Real_Number :=Rnr(G_Var(2)); Example
Chapter III, Screen Control Language page 151 Chapter III, Screen Control Language page 151
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
FUNCTION Power(Mantissa, Exponent : REAL):REAL; FUNCTION Power(Mantissa, Exponent : REAL):REAL;
Returns the value of Mantissa raised to the power of Exponent.
FUNCTION Exist(Fn : String80):BOOLEAN; FUNCTION Exist(Fn : String80):BOOLEAN;
Returns TRUE if a file with the name of Fn exists. Fn can contain a
complete path description according to DOS rules.
PROCEDURE Beep; PROCEDURE Beep;
Creates a sound with a length of 'Beep_Time' clock ticks, alternating
every every clock tick between the two frequencies 'Beep_Frequency_1'
and 'Beep_Frequency_2'.
Note: A clock tick occurs approximately 18.2 times per second (about Note:
every 55 ms).
FUNCTION Sys_Msg(Msgnr : INTEGER):String80; FUNCTION Sys_Msg(Msgnr : INTEGER):String80;
Returns the text of record <Msgnr> in file <Screenfile>.ERR. Can be
used in user programs to receive strings etc stored in this file (See
also Appendix A; "The error message file").
FUNCTION Format_Name:String10; FUNCTION Format_Name:String10;
Returns the name of the currently active format.
Chapter III, Screen Control Language page 152 Chapter III, Screen Control Language page 152
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Chapter IV Chapter IV
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
This Page is intentionally left blank
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
S C L S C L
Data Communications Subsystem Data Communications Subsystem
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Introduction Introduction
Due to their background tasking capability, SCL programs are ideally
suited for data communications.
This opens many exciting possibilities especially in the area of
micro-mainframe connections, but also allow you to build terminal
emulators etc.
The datacom routines provided by SCL allow you to easily develop
complex protocols that enable SCL programs to communicate with other
machines via the RS232 serial interface.
All necessary communications parameters can be programatically
changed and easily adapted to any requirements.
The actual handling and monitoring of the RS232 port is interrupt
driven and therefore very powerful without imposing unnecessary
overhead on your program.
The following discusses the complete SCL Data Communications
Subsystem. In order to help you develop your own protocols two
example programs have been provided on your distribution disks, these
will be discussed as well.
Note: Note:
In order to utilize the SCL Data Communications routines, your
computer must be equipped with a serial asynchronous Interface
(COM1:). This Interface will typically be connected to a Modem.
CHAPTER IV, SCL Data Communication subsystem page 156 CHAPTER IV, SCL Data Communication subsystem page 156
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Global Communications Parameters Global Communications Parameters
The following parameters must be set according to your needs.
Since all major parameters are declared using Typed Constants this Typed Constants
can be done either in the program source or during runtime.
DC_Parity DC_Parity
Declaration:
CONST Dc_Parity : CHAR = 'E';
This parameter determines which parity is being used, if any. The
possible values are 'E' (Even), 'O' (Odd) and 'N' (None).
DC_Stopbits. DC_Stopbits.
Declaration:
CONST Dc_Stopbits : Integer = 1;
Set this value to 2 if two stopbits are required.
DC_Speed DC_Speed
Declaration:
CONST Dc_Speed : Integer = 9600;
This parameter determines the line speed in baud. The possible values
are 110, 150, 300, 600, 1200, 2400, 4800 and 9600 baud.
DC_Charsize DC_Charsize
Declaration:
CONST Dc_Charsize : Integer = 7;
This value determines the number of bits per character. The possible
values are 7 or 8.
BCC_Set BCC_Set
Declaration:
CONST BCC_Set : BOOLEAN = FALSE;
If this variable is TRUE, a Block Check Character is sent with all
messages. Refer to the description of 'Send_Buffer' for further
details.
CHAPTER IV, SCL Data Communication subsystem page 157 CHAPTER IV, SCL Data Communication subsystem page 157
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Timers and Delays Timers and Delays
Tx_Char_Timeout Tx_Char_Timeout
Declaration:
CONST Tx_Char_Timeout : INTEGER = 500;
Maximum time to wait until the previous character has been sent in
milliseconds. See also procedure 'DC_Write'.
Rts_Cts_Timeout Rts_Cts_Timeout
Declaration:
CONST Rts_Cts_Timeout : INTEGER = 500;
Maximum time in milliseconds to wait for 'Clear to Send' after
'Request to send' was raised. See also function 'Tx_Ok'.
Rts_Cts_Delay Rts_Cts_Delay
Declaration:
CONST Rts_Cts_Delay : INTEGER = 0;
Minimum time in milliseconds between the raising of 'Request to send'
and sending of the first character.
This option is required with some datasets where 'clear to send' may
come up before the modem is actually ready to receive the first
character.
Rts_Holdover Rts_Holdover
Declaration:
CONST Rts_Holdover : INTEGER = 0;
The time in milliseconds to wait before 'Request to send' is dropped
after the last character has been transmitted.
This option is required with some datasets in order to avoid datacom
line noise.
CHAPTER IV, SCL Data Communication subsystem page 158 CHAPTER IV, SCL Data Communication subsystem page 158
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Data Communications Control Characters Data Communications Control Characters
The following definitions have been provided to enhance the
readability and to facilitate the writing of terminal and line
protocols.
CONST
Nul = $0;
Soh = $1;
Stx = $2;
Etx = $3;
Eot = $4;
Enq = $5;
Ack = $6;
Bel = $7;
Con = $7;
Bs = $8;
Ht = $9;
Lf = $a;
Vt = $b;
Ff = $c;
Cr = $d;
S0 = $e;
S1 = $f;
Dle = $10;
Dc1 = $11;
Dc2 = $12;
Dc3 = $13;
Dc4 = $14;
Nak = $15;
Syn = $16;
Etb = $17;
Can = $18;
Em = $19;
Sub = $1a;
Esc = $1b;
Fs = $1c;
Gs = $1d;
Rs = $1e;
Us = $1f;
Pol = $70;
Sel = $71;
Fsl = $73;
Bsl = $74;
Del = $7f;
CHAPTER IV, SCL Data Communication subsystem page 159 CHAPTER IV, SCL Data Communication subsystem page 159
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Other Declarations Other Declarations
DC_Buff_Size DC_Buff_Size
Declaration:
CONST DC_Buff_Size = 2500;
This is the size of the circular buffer in which the received
characters are written by the interrupt service routine.
DC_Rx_Buffer DC_Rx_Buffer
Declaration:
VAR DC_Rx_Buffer : ARRAY[0..DC_Buff_Size] of BYTE;
The circular buffer used by the interrupt service routine.
DC_Rx_Buff_Bottom DC_Rx_Buff_Bottom
Declaration:
CONST DC_Rx_Buff_Bottom : INTEGER = 0;
Points to the 'bottom' (= the first character to be read) of
DC_Rx_Buffer. If DC_Rx_Buff_Bottom is equal to DC_Rx_Buff_Top then
the receive buffer is empty.
DC_Rx_Buff_Top DC_Rx_Buff_Top
Declaration:
CONST DC_Rx_Buff_Top : INTEGER = 0;
Points to the 'Top' (= the position where the ISR will write the next
character received) of DC_Rx_Buffer. If DC_Rx_Buff_Bottom is equal to
DC_Rx_Buff_Top then the receive buffer is empty.
CHAPTER IV, SCL Data Communication subsystem page 160 CHAPTER IV, SCL Data Communication subsystem page 160
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Bcc Bcc
Declaration:
VAR Bcc : Byte;
Used to calculate the block check character.
DC_Open DC_Open
Declaration:
CONST Dc_Open : BOOLEAN = FALSE;
This Typed Constant is set to TRUE if the SCL datacom system is Typed Constant
initialized.
CHAPTER IV, SCL Data Communication subsystem page 161 CHAPTER IV, SCL Data Communication subsystem page 161
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Data Communications SCL Data Communications
Procedures and Functions Procedures and Functions
CHAPTER IV, SCL Data Communication subsystem page 162 CHAPTER IV, SCL Data Communication subsystem page 162
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Initializing and Terminating DC Initializing and Terminating DC
PROCEDURE Open_Dc(VAR Result:INTEGER); PROCEDURE Open_Dc(VAR Result:INTEGER);
This procedure initializes the datacom subsystem and installs the
Interrupt Service Routine to receive characters. All parameters like
line speed, parity etc must be correctly set before this procedure is
called.
Both Line and Modem status after the initialization are returned in
'Result'. The meaning of 'Result' is as follows:
Bit High order byte (line status) Low order Byte (Modem) Bit High order byte (line status) Low order Byte (Modem)
7 Time_Out Error Rx line signal detect
6 Transfer Shift Register empty Ring indicator
5 Transfer Holding Register empty Data set ready
4 Break_Detect error Clear to send
3 Framing error Delta RxLSD
2 Parity error Trailing edge RI
1 Overrun error Delta DSR
0 Data Ready Delta CTS
PROCEDURE Close_Dc; PROCEDURE Close_Dc;
This procedure must be called to terminate the DC subsystem. It
deinstalls the interrupt service routine and reinstates the interrupt
vector to its original content. Failing to call this routine before
the program is finished can lead to strange effects and may make a
system reboot necessary.
CHAPTER IV, SCL Data Communication subsystem page 163 CHAPTER IV, SCL Data Communication subsystem page 163
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Sending Data Sending Data
PROCEDURE Send_Char(Code:BYTE ; VAR OK:BOOLEAN); PROCEDURE Send_Char(Code:BYTE ; VAR OK:BOOLEAN);
This procedure raises RTS, and, once CTS is raised, sends the
character with the ASCII code of 'Code' onto the RS232 interface.
Then RTS is dropped again. If either CTS does not come up within
'RTS_CTS_Timeout' or if the character cannot be sent within
'Tx_Char_Timeout' then the operation is aborted and 'Ok' is returned
FALSE.
Example: Example:
Send_Char(EOT,Ok); {sends an 'EOT' character (ASCII 4) }
PROCEDURE Send_String(Data:String255;VAR OK:BOOLEAN); PROCEDURE Send_String(Data:String255;VAR OK:BOOLEAN);
This procedure is similar to 'Send_Char' except that a string (Data)
is sent.
Example: Example:
Send_String('Hello',Ok);
PROCEDURE Send_Buffer(VAR Tx_Buff; PROCEDURE Send_Buffer(VAR Tx_Buff;
Buff_Start,Buff_Length,Bcc_Add:INTEGER; Buff_Start,Buff_Length,Bcc_Add:INTEGER;
Head:String255; var Ok:BOOLEAN); Head:String255; var Ok:BOOLEAN);
This procedure first sends the string 'Head', then an 'STX' character
(ASCII 2) and thereafter 'Buff_Length' bytes of 'Tx_Buff', starting
at a displacement of 'Buff_Start' bytes. Then an 'ETX' (ASCII 3) is
sent. If 'BCC_Set' is true, a block check character follows. This
block check character is calculated by adding all characters starting
from the 'STX' up to and including the 'ETX' to Bcc_Add without
Carry, i.e using an 'XOR' function. 'Bcc_add' can be used to include
'Head' into the Bcc calculation if required.
Error handling etc are identical to the those described under
'Send_String'. The data contained in Tx_Buff must be bytes
representing the ASCII codes of the characters to be sent. This
procedure is compatible with the most commonly used data
communication protocols.
Note: Note:
An example for 'Send_Buffer' is shown on the next page.
CHAPTER IV, SCL Data Communication subsystem page 164 CHAPTER IV, SCL Data Communication subsystem page 164
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example: Example:
PROCEDURE Example;
VAR
My_Buffer:ARRAY[0..2000] of bytes;
My_Header:String255;
Write_Ok :BOOLEAN;
CONST
My_String:String255 = 'Hello';
BEGIN;
BCC_Set:=TRUE; {send block check character}
My_Header:=SOH + 'A' + '1'; {a typical header for poll/select}
MOVE(My_String,My_Buffer,LENGTH(My_String)+1); {first byte is
length of the
Send_Buffer(My_Buffer,1,LENGTH(My_String),0,My_Header,Write_Ok); END;
{displacement of 1 to exclude the byte containing length}
The above procedure causes the following string to be sent:
<SOH>A1<STX>Hello<ETX><BCC>
The BCC is calculated without header (starting from 'STX'). If it is
required to include the header into the BCC calculation, its BCC
must be calculated externally and passed to 'Send_Buffer' via
'BCC_Add'.
For this example the BCC for the header could be calculated using
the following statement:
Head_Bcc := SOH XOR ORD('A') XOR ORDd('1');
CHAPTER IV, SCL Data Communication subsystem page 165 CHAPTER IV, SCL Data Communication subsystem page 165
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Receiving Data Receiving Data
PROCEDURE Receive_Char(VAR Code:INTEGER; VAR Ok:BOOLEAN); PROCEDURE Receive_Char(VAR Code:INTEGER; VAR Ok:BOOLEAN);
Returns the ASCII Code of the character in the circular receive
buffer pointed to by the 'Bottom' pointer (This character was
received from datacom and put into the buffer by the Interrupt
Service Routine). The 'Bottom' buffer pointer is then
incremented.
If the circular receive buffer does not contain any characters (Top =
Bottom) then 'Ok' is returned FALSE.
CHAPTER IV, SCL Data Communication subsystem page 166 CHAPTER IV, SCL Data Communication subsystem page 166
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Other Functions Other Functions
PROCEDURE Disable_Port; PROCEDURE Disable_Port;
This Procedure can be called to disable the RS232 port temporarily,
for example to change parameters.
PROCEDURE Enable_Port; PROCEDURE Enable_Port
This procedure reinstates datacom if it was disabled using
'Disable_Port'.
PROCEDURE Clear_Rx_Buffer; PROCEDURE Clear_Rx_Buffer;
This Procedure clears the circular receive buffer, i.e it sets Top
equal to Bottom.
PROCEDURE Set_DC_Params; PROCEDURE Set_DC_Params;
This Procedure must be called if data communication parameters
(speed, parity etc) have been changed.
The following sequence of procedures is recommended to change
communication parameters:
Disable_Port;
DC_Speed:=4800;
Set_DC_Params;
Enable_Port;
Clear_RX_Buffer;
PROCEDURE DC_Diagnose(On:BOOLEAN); PROCEDURE DC_Diagnose(On:BOOLEAN);
If 'On' is TRUE, the loopback feature for diagnostic testing will be
set. This causes the output of the 'Send' shift register in the RS232
adapter to be directly looped back to the 'Receive' shift register
input, i.e all data transmitted is immediately received again. If 'On
is FALSEl the loopback feature will be reset and normal operation is
resumed.
This feature can be used for test purposes.
PROCEDURE Get_Dc_Status(VAR Status:INTEGER); PROCEDURE Get_Dc_Status(VAR Status:INTEGER);
This procedure returns the present line and modem status. The meaning
of 'Status' is the same as described under 'Open_Dc'.
CHAPTER IV, SCL Data Communication subsystem page 167 CHAPTER IV, SCL Data Communication subsystem page 167
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Low Level Routines Low Level Routines
PROCEDURE Set_Dtr(On:BOOLEAN); PROCEDURE Set_Dtr(On:BOOLEAN);
Depending on the the status of 'On', this procedure sets or resets
Data terminal Ready. If 'On' is FALSE, Request to send will also be
dropped.
PROCEDURE Set_Rts(On:BOOLEAN); PROCEDURE Set_Rts(On:BOOLEAN);
This procedure raises or drops Request to send.
PROCEDURE DC_Write(Code:BYTE;VAR Ok:BOOLEAN); PROCEDURE DC_Write(Code:BYTE;VAR Ok:BOOLEAN);
This procedure sends the character indicated by 'Code' onto the RS232
Interface. It does not manipulate RTS as the appropriate High Level
Routines do (Send_...). The setting and resetting of RTS can be
performed with 'Tx_Ok' and 'Set_Rts'.
If the Character cannot be sent before 'Tx_Char_Timeout' the
operation is aborted and 'Ok' is returned FALSE.
FUNCTION Tx_Ok:BOOLEAN; FUNCTION Tx_Ok:BOOLEAN;
Tx_Ok raises 'Request to send' and returns TRUE if Clear to Send
comes up before 'Rts_Cts_Timeout'.
FUNCTION Dsr:BOOLEAN; FUNCTION Dsr:BOOLEAN;
Dsr returns the present status of Data set ready.
FUNCTION Cts:BOOLEAN; FUNCTION Cts:BOOLEAN;
Cts returns the present status of Clear to send.
PROCEDURE DC_Break; PROCEDURE DC_Break;
This procedure causes a 'Break' to be sent.
CHAPTER IV, SCL Data Communication subsystem page 168 CHAPTER IV, SCL Data Communication subsystem page 168
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE DC_Isr; PROCEDURE DC_Isr;
This is the Interrupt service routine for interrupt Hex 0C. It is
called by the IRQ4 whenever a character has been received via the
RS232 Interface. DC_Isr fetches this character and places it into the
circular Receive buffer where it the can be read using
'Receive_Char'. DC_Isr may not be called directly by a user program.
CHAPTER IV, SCL Data Communication subsystem page 169 CHAPTER IV, SCL Data Communication subsystem page 169
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Data communications SCL Data communications
Example Programs Example Programs
Chapter IV, SCL Data Communication example programs page 170 Chapter IV, SCL Data Communication example programs page 170
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
A Simple Line Monitor (SAMPLE7.PAS) A Simple Line Monitor (SAMPLE7.PAS)
In this example program the SCL datacom routines are used to build a
simple datacom line monitor which interprets and displays and
interprets the traffic on a datacom line.
The major datacom parameters like baudrate, wordsize, number of
stopbits and parity can be dynamically changed while the
interpretation of the line traffic is instantly visible. This program
is therefore a neat tool to rapidly decipher the parameter settings
of the datacom line you are connected to. In order to verify the
functionality of this program, just connect COM1: to a busy datacom
line and start it.
Below you find the complete source code of the line monitor program,
a detailed description follows afterwards.
Chapter IV, SCL Data Communication example programs page 171 Chapter IV, SCL Data Communication example programs page 171
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Listing of SAMPLE7.PAS Listing of SAMPLE7.PAS
PROGRAM dc_monitor; {a simple datacom line monitor}
uses scl; {make SCL accessible}
VAR
Ok : BOOLEAN;
Wrkstr : String80;
Temp : INTEGER;
Freeze : BOOLEAN;
FUNCTION Xlate(Cn:INTEGER):String10; {datacom control character} VAR
Tmp:String10; {interpretation}
BEGIN;
CASE Cn OF
$0 : Tmp:='<NUL>';
$1 : Tmp:='<SOH>';
$2 : Tmp:='<STX>';
$3 : Tmp:='<ETX>';
$4 : Tmp:='<EOT>';
$5 : Tmp:='<ENQ>';
$6 : Tmp:='<ACK>';
$7 : Tmp:='<BEL>';
$8 : Tmp:='<BS>';
$9 : Tmp:='<HT>';
$a : Tmp:='<LF>';
$b : Tmp:='<VT>';
$c : Tmp:='<FF>';
$d : Tmp:='<CR>';
$e : Tmp:='<S0>';
$f : Tmp:='<S1>';
$10: Tmp:='<DLE>';
$11: Tmp:='<DC1>';
$12: Tmp:='<DC2>';
$13: Tmp:='<DC3>';
$14: Tmp:='<DC4>';
$15: Tmp:='<NAK>';
$16: Tmp:='<SYN>';
$17: Tmp:='<ETB>';
$18: Tmp:='<CAN>';
$19: Tmp:='<EM>';
$1a: Tmp:='<SUB>';
$1b: Tmp:='<ESC>';
$1c: Tmp:='<FS>';
$1d: Tmp:='<GS>';
$1e: Tmp:='<RS>';
Chapter IV, SCL Data Communication example programs page 172 Chapter IV, SCL Data Communication example programs page 172
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
$1f: Tmp:='<US>';
$70: Tmp:='<POL>';
$71: Tmp:='<SEL>';
$72: Tmp:='<FSL>';
$73: Tmp:='<BSL>';
$7f: Tmp:='<DEL>';
$80..$ff:
Tmp:='<' + St(Cn) + '>'; {return character code} ELSE
Tmp:=CHR(Cn); {return character}
END;
Xlate:=Tmp;
END;
{$F+} {far call option required for SCL background tasks}
PROCEDURE Lp_Background_Task; {updates the line traffic field}
BEGIN;
IF NOT Freeze THEN {F9 toggles Freeze}
BEGIN;
REPEAT
Receive_Char(Temp,Ok); {receive char from datacom}
IF Ok THEN {there was one}
BEGIN;
Wrkstr:=Wrkstr+Xlate(Temp); {interpret it}
WHILE LENGTH(Wrkstr) > 76 DO {cut off oldest}
DELETE(Wrkstr,1,1);
END;
UNTIL NOT Ok; {no more characters}
W_Cont(7,Wrkstr); {update traffic field}
END;
END;
{$F-} {reset far calls again}
Chapter IV, SCL Data Communication example programs page 173 Chapter IV, SCL Data Communication example programs page 173
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE Update_Params; {spacebar pressed}
VAR Sp:INTEGER;
BEGIN;
CASE Active_Field OF
1: BEGIN; {linespeed}
Sp:=Nr(G_Cont(1)); {get current speed}
IF Sp = 110 THEN Sp:= 150 ELSE
IF Sp = 150 THEN Sp:= 300 ELSE {switch}
IF Sp = 300 THEN Sp:= 600 ELSE {to}
IF Sp = 600 THEN Sp:=1200 ELSE {next}
IF Sp = 1200 THEN Sp:=2400 ELSE {speed}
IF Sp = 2400 THEN Sp:=4800 ELSE
IF Sp = 4800 THEN Sp:=9600 ELSE
Sp:=110;
Dc_Speed:=Sp; {update speed}
W_Cont(1,St(Sp)); {update field}
END;
2: BEGIN; {char size}
Sp:=Nr(G_Cont(2));
Sp:=Sp+1;
IF Sp > 8 THEN
Sp:=5;
Dc_Charsize:=Sp; {update param}
W_Cont(2,St(Sp)); {update field}
END;
3: BEGIN;
Sp:=Nr(G_Cont(3)); {stop bits}
IF Sp = 1 THEN Sp:=2 ELSE Sp:=1;
Dc_Stopbits:=Sp; {update param}
W_Cont(3,St(Sp)); {update field}
END;
4: IF G_Cont(4) = 'Even'THEN {parity}
BEGIN;
W_Cont(4,'None');
Dc_Parity:='N';
END
ELSE
IF G_Cont(4) = 'None'THEN
BEGIN;
W_Cont(4,'Odd');
Dc_Parity:='O';
END
ELSE
BEGIN;
W_Cont(4,'Even');
Dc_Parity:='E';
END;
END;
Chapter IV, SCL Data Communication example programs page 174 Chapter IV, SCL Data Communication example programs page 174
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Disable_Port; {temporary disable datacom}
Set_Dc_Params; {set new dc params}
Enable_Port; {enable datacom again}
END;
PROCEDURE Handle_Uf;
BEGIN;
IF Char_Code = 32 THEN {Spacebar pressed}
BEGIN;
Update_Params; {update dc params}
Char_Code:=Code_Noop; {no further action}
END
ELSE
IF Char_Code = Code_F9 THEN {F9 Pressed}
BEGIN;
Freeze:= NOT Freeze; {toggle freeze}
Char_Code:=Code_Noop; {no further action}
END
ELSE
IF Char_Code = Code_Return THEN Char_Code:=Code_Tab ELSE
IF Char_Code = Code_Escape THEN Char_Code:=Code_Noop;
END;
PROCEDURE Handle_First; {This Procedure handles format
'first'.}
BEGIN;
Select_Format('main');
W_Cont(1,St(Dc_Speed)); {prefill}
W_Cont(2,St(Dc_Charsize)); {the}
W_Cont(3,St(Dc_Stopbits)); {fields}
IF Dc_Parity = 'E' THEN W_Cont(4,'Even') ELSE
IF Dc_Parity = 'O' THEN W_Cont(4,'Odd') ELSE
W_Cont(4,'None');
Freeze:=FALSE; {display incoming traffic}
Display_Format(0,0);
REPEAT
Handle_Format; {Complete Loop to handle format input}
IF User_Function THEN {user key pressed}
Handle_Uf; {user interrupt procedure}
UNTIL Format_Done; {Either completely filled in or abort
pressed} END;
Chapter IV, SCL Data Communication example programs page 175 Chapter IV, SCL Data Communication example programs page 175
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
VAR Res:INTEGER;
BEGIN; {of main}
Wrkstr:='';
Select_Format_File('Sample7'); {initializes SCL and loads the
format file 'Sample7'}
LP_Background_pointer:=@LP_Background_task; {invoke our screen
updating routine as low priority
background task}
Auto_Help_Set:=FALSE; {reset autohelp feature}
Open_Dc(Res); {initialize Datacom system}
Handle_First; {load,display and handle the format}
Close_Formats; {terminate SCL}
Close_Dc; {close Datacom system}
END. {of main}
Chapter IV, SCL Data Communication example programs page 176 Chapter IV, SCL Data Communication example programs page 176
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Description of SAMPLE7.PAS Description of SAMPLE7.PAS
Main Program Main Program
The first SCL datacom routine being called is 'Open_DC'. It
initializes the datacom system and installs the Interrupt Service Interrupt Service
Routine which from this very moment will receive all characters on Routine
the datacom line and place them into the circular receive buffer.
Then the procedure 'Handle_Main' is called to display and handle the
only screen format in this program. If 'Handle_Main' is finished,
'Close_DC' is called which terminates the datacom system and
deinstalls the ISR.
Finally, 'Close_formats' terminates SCL as usual.
Handle_Main Handle_Main
As soon as the format is selected, its fields are 'prefilled' with
the current settings of the main datacom parameters.
The format is then displayed.
The datacom line traffic is interpreted and displayed by the
procedure LP_Background_Task.
Handle_Uf Handle_Uf
'Handle_Uf is a user function procedure acting on several keyboard
keys (Spacebar, F9, Return and Escape).
In this program, the spacebar is used to change datacom parameters.
If it is pressed, the procedure 'Update_Params' is called to process
these changes.
If F9 is pressed, the boolean variable 'Freeze' is toggled. If
'Freeze' is TRUE, the display of datacom line traffic is halted for
better readability. Pressing F9 again will restart it. If Return is
pressed, it is replaced by a 'Tab' to prevent SCL from terminating
the format.
'Escape' is replaced by a NoOp (this program is terminated by
pressing the 'Abort' key (F10).
Update_Params Update_Params
This procedure is called whenever the spacebar is pressed. For the
currently active field, it substitutes the present SCL datacom
parameter by the next possible choice and displays its new value.
The datacom port is then temporarily disabled ('Disable_Port') before
'Set_DC_Params' is called to activate the new parameter setting.
Finally the datacom port is enabled again using 'Enable_Port'.
Chapter IV, SCL Data Communication example programs page 177 Chapter IV, SCL Data Communication example programs page 177
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
LP_Background_Task LP_Background_Task
As long as 'Freeze' is FALSE, this 'Background processing' procedure
permanently updates the line traffic display field (field 7).
It reads all characters having been received since the last update
from the circular buffer (using 'Receive_Char').
Each character is interpreted via the function 'Xlate' (see below)
and the resulting string is then displayed in field 7. If the string
to be outputed outgrows the size of the display window, the oldest
characters are trimmed, thereby creating a horizontal scroll effect.
For further informations on background processing please refer to
Appendix A.
Xlate Xlate
This procedure makes the line traffic more readable by translating
all ASCII codes representing datacom control characters into more
meaningful strings. For example, character ASCII #4 is translated
into the string '<EOT>'.
Similarly, all codes above ASCII 125 are translated into strings
showing their ASCII code in '< >' brackets (example: ASCII 130 is
returned as '<130>').
For all other codes their corresponding character images are
returned.
Chapter IV, SCL Data Communication example programs page 178 Chapter IV, SCL Data Communication example programs page 178
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
A Terminal Emulator Program (SAMPLE 8) A Terminal Emulator Program (SAMPLE 8)
This example program features a terminal emulator program using a
rather complex poll select protocol, which is even capable of
handling multiple receive/transmit buffers.
It has been derived from a 'real world' SCL program which works on a
BURROUGHS mainframe datacom network together with other terminals in
a multipoint environment at 9600 baud and emulates the datacom
protocol of a BURROUGHS TD830 Terminal.
This example program is intended to demonstrate how to write a
datacom protocol, for this reason the screen interface
deliberately is basic and only consists of a single format with two
fields, one where a message to be sent can be entered and another one
were all messages received from the mainframe are displayed.
Since nearly every mainframe type uses a different protocol, details
specific to this protocol are purposely not covered in depth, the
intention is to concentrate on the more common aspects of how to
write terminal protocols with the help of SCL.
Nevertheless this example can probably serve as a good basis for your
own developments.
Note: Note:
There are many different possibilities to interface SCL programs to
mainframes; typically an SCL program will emulate the datacom
interface of a terminal and do all other internal tasks using its own
resources, thus presenting the user with its own powerful
capabilities. Dialogues with the mainframe are usually performed in
the background, automatically and totally transparent to the user.
Chapter IV, SCL Data Communication example programs page 179 Chapter IV, SCL Data Communication example programs page 179
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Listing of Example Program 8 Listing of Example Program 8
The following is an extract of SAMPLE8.PAS and shows the poll select
handling routines used by this program.
CONST
Tx_Buffers = 1; {nr of xmit buffers; minimum = 1}
Rx_Buffers = 1; {nr of receive buffers; minimum = 1}
Dc_Addr_1 : Byte = $33; {first byte of terminal address}
Dc_Addr_2 : Byte = $31; {second byte of terminal address}
TYPE
Buffer_Data = ARRAY[1..Dc_Buffer_Size] OF Byte;
Buffer_Type = RECORD {description of rx and tx buffers}
Len :INTEGER; {length of data in buffer}
Data:Buffer_Data;
END;
Rx_Buffer_Type= ARRAY[0..Rx_Buffers] OF Buffer_Type;
Tx_Buffer_Type= ARRAY[0..Tx_Buffers] OF Buffer_Type;
VAR
Rx_Buffer_Overflow:BOOLEAN; {rx data > buffersize}
Rx_Buffer:Rx_Buffer_Type;
Tx_Buffer:Tx_Buffer_Type;
Result_Ok:BOOLEAN;
Ch_Code:INTEGER;
State:INTEGER; {used in poll select state machine}
Rx_Buff_Wptr, {rx buffer to be filled next}
Rx_Buff_Rptr, {rx buffer to be read next}
Tx_Buff_Wptr, {tx buffer to be sent last}
Tx_Buff_Rptr : INTEGER; {tx buffer to be sent first}
This_Char_Done:BOOLEAN; {used in poll select state machine}
Dc_Msg_Header:String255;
Cont_String:String255;
Char_Ind:INTEGER;
Ok : BOOLEAN;
Head_Bcc:INTEGER;
PROCEDURE Ps_Handler; {poll select state machine. run as }
BEGIN; {background task}
IF This_Char_Done THEN {previous character finished}
Receive_Char(Ch_Code,Ok); {get next char from dc rx buffer}
IF Ok THEN {there was a character}
Chapter IV, SCL Data Communication example programs page 180 Chapter IV, SCL Data Communication example programs page 180
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
BEGIN;
This_Char_Done:=TRUE; {preset}
CASE State OF
0:IF Ch_Code = Eot THEN State:=1; {eot received}
1:IF Ch_Code = Dc_Addr_1 THEN {first byte of address}
State:=2 {wait for second byte}
ELSE
State:=0; {reset state machine}
2:IF Ch_Code = Dc_Addr_2 THEN {second byte of address}
State:=3 {wait for cntrl char}
ELSE State:=0; {reset state machine}
3:IF Ch_Code = Pol THEN State:=4 ELSE {poll string}
IF Ch_Code = Sel THEN State:=7 ELSE {select string}
IF Ch_Code = Fsl THEN State:=15 ELSE {fast sel}
State:=0; {otherwise reset state machine}
4:IF Ch_Code = Enq THEN {end of string}
BEGIN;
This_Char_Done:=FALSE; {dont read next char}
State:=5 {next is state = 5}
END
ELSE
State:=0; {reset state machine}
5:IF Tx_Buffer[Tx_Buff_Rptr].Len = 0 THEN
BEGIN; {no data to send}
Send_Char(Eot,Ok); {send eot}
State:=0; {..and reset state machine}
END
ELSE {there is data to be sent}
BEGIN; {send it with header and bcc}
Send_Buffer(Tx_Buffer[Tx_Buff_Rptr].Data,
1,Tx_Buffer[Tx_Buff_Rptr].Len,Head_Bcc,
Dc_Msg_Header,Ok);
IF Ok THEN {successfully sent}
State:=6 {wait for ack}
ELSE
State:=0; {otherwise reset state machine}
END;
6:BEGIN;
IF Ch_Code = Ack THEN {ack received}
BEGIN;
Send_Char(Eot,Ok); {send eot}
IF Ok THEN {successfully sent}
BEGIN; {clear buffer & increase pointer}
Tx_Buffer[Tx_Buff_Rptr].Len:=0;
Tx_Buff_Rptr:=SUCC(Tx_Buff_Rptr) MOD
Tx_Buffers;
END;
State:=0; {reset state machine}
END
Chapter IV, SCL Data Communication example programs page 181 Chapter IV, SCL Data Communication example programs page 181
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
ELSE
IF Ch_Code = Nak THEN {mainframe didnt receive ok}
BEGIN; {resend data}
This_Char_Done:=FALSE;
State:=5;
END
ELSE {mainframe did not respond}
State:=0; {reset state machine}
END;
7: IF Ch_Code = Enq THEN {end of sel string}
BEGIN;
This_Char_Done:=FALSE; {dont receive next char}
State:=8; {answer}
END
ELSE
State:=0; {reset state machine}
8: IF Rx_Buffer[Rx_Buff_Wptr].Len > 0 THEN
BEGIN; {we have no rx buffer available}
Send_Char(Nak,Ok); {send nak}
State:=0; {reset state machine}
END
ELSE {we can receive data}
BEGIN;
Send_Char(Ack,Ok); {send ack}
IF Ok THEN State:=9 ELSE {ack could be sent}
State:=0; {otherwise reset state machine}
END;
9: IF Ch_Code = Soh THEN
State:=10 {SOH received}
ELSE State:=0;
10: IF Ch_Code = Dc_Addr_1 THEN {first byte of address}
State:=11
ELSE State:=0;
11: IF Ch_Code = Dc_Addr_2 THEN
State:=12 {second byte of address received}
ELSE State:=0;
12: BEGIN;
IF Ch_Code = Stx THEN {stx received}
BEGIN;
Bcc:=Stx XOr Head_Bcc; {start bcc calculation}
Char_Ind:=1; {init rx buffer}
State:=13; {rx data}
END
ELSE
State:=0; {reset state machine}
END;
Chapter IV, SCL Data Communication example programs page 182 Chapter IV, SCL Data Communication example programs page 182
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
13: BEGIN; {receive data & write into rx buffer}
IF (Char_Ind < Dc_Buffer_Size) AND (Ch_Code <> Etx) THEN
BEGIN; {buffer not full and not etx received}
Rx_Buffer[Rx_Buff_Wptr].Data[Char_Ind]:=Ch_Code;
Bcc:=Bcc XOr Ch_Code; {bcc calculation}
Char_Ind:=SUCC(Char_Ind); {increase buffer index}
END
ELSE
IF Ch_Code = Etx THEN {etx received}
BEGIN;
Bcc:=Bcc XOr Etx; {get final bcc}
Rx_Buffer[Rx_Buff_Wptr].Len:=Char_Ind - 1;
State:=14;
END
ELSE {rx buffer overflow}
BEGIN;
State:=0; {reset state machine}
Rx_Buffer_Overflow:=TRUE; {set flag}
END;
END;
14: BEGIN;
IF Ch_Code = Bcc THEN {received = calculated bcc}
BEGIN;
Send_Char(Ack,Ok); {send an ACK}
IF Ok THEN {successfully sent, next rx buffer}
Rx_Buff_Wptr:=SUCC(Rx_Buff_Wptr) MOD Rx_Buffers
ELSE
Rx_Buffer[Rx_Buff_Wptr].Len:=0;{forget rx data}
END
ELSE {bcc error}
BEGIN;
Rx_Buffer[Rx_Buff_Wptr].Len:=0;{forget rx data}
Send_Char(Nak,Ok); {send nak}
END;
State:=0; {reset state machine}
END;
15: IF Ch_Code = Soh THEN State:=16 ELSE State:=0; {FSL}
16: IF Ch_Code = Dc_Addr_1 THEN State:=17 ELSE State:=0;
17: IF Ch_Code = Dc_Addr_2 THEN State:=18 ELSE State:=0;
Chapter IV, SCL Data Communication example programs page 183 Chapter IV, SCL Data Communication example programs page 183
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
18: BEGIN;
IF Ch_Code = Stx THEN {stx received}
BEGIN;
IF Rx_Buffer[Rx_Buff_Wptr].Len > 0 THEN
State:=0 {no rx buffer available}
ELSE
BEGIN; {start bcc calculation}
Bcc:=Stx XOr Head_Bcc;
Char_Ind:=1; {init buff index}
State:=13; {wait for rx data}
END;
END
ELSE
State:=0; {reset state machine}
END;
ELSE State:=0; {reset state machine}
END; {end case}
IF Ch_Code = Eot THEN State:=1; {preset state machine}
END;
END;
PROCEDURE Clear_Rx_Buffers; {clear all rx buffers}
VAR X:INTEGER;
BEGIN;
FOR X:=0 TO Rx_Buffers DO
Rx_Buffer[X].Len:=0; {set length to 0}
Rx_Buff_Wptr:=0; {both pointers to 0}
Rx_Buff_Rptr:=0;
END;
PROCEDURE Clear_Tx_Buffers; {clear all xmit buffers}
VAR X:INTEGER;
BEGIN;
FOR X:=0 TO Tx_Buffers DO
Tx_Buffer[X].Len:=0; {set length to 0}
Tx_Buff_Wptr:=0; {set both pointers to 0}
Tx_Buff_Rptr:=0;
END;
Chapter IV, SCL Data Communication example programs page 184 Chapter IV, SCL Data Communication example programs page 184
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE Init_Ps; {init poll select system}
VAR
Stat:INTEGER;
BEGIN;
Rx_Buffer_Overflow:=FALSE;
Cont_String:=CHR(Dc_Addr_1) + CHR(Dc_Addr_2)
+ CHR(Pol) + CHR(Enq); {set up contention string}
Dc_Msg_Header:=CHR(Soh)+CHR(Dc_Addr_1)+CHR(Dc_Addr_2); {header}
Head_Bcc:=Dc_Addr_1 XOr Dc_Addr_2; {calculate bcc for header}
State:=0; {reset state machine}
Clear_Rx_Buffers; {clear rx buffers}
Clear_Tx_Buffers; {clear tx buffers}
This_Char_Done:=TRUE;
Open_Dc(Stat); {open datacom & install ISR}
Send_String(Cont_String,Result_Ok); {send contention string}
END;
FUNCTION Data_Received:BOOLEAN; {returns true if at least one }
BEGIN; {of the rx buffers contains data}
Data_Received:= Rx_Buffer[Rx_Buff_Rptr].Len > 0;
END;
FUNCTION Dc_Write_Ok:BOOLEAN; {returns true if at least one}
BEGIN; {of the tx buffers is available}
Dc_Write_Ok:=Tx_Buffer[Tx_Buff_Wptr].Len = 0;
END;
PROCEDURE Read_Dc(VAR Data;VAR Len:INTEGER;VAR Ok:BOOLEAN);
BEGIN; {call this routine to obtain data received from Mainframe}
IF Data_Received THEN {one of the rx buffers contains data}
BEGIN; {return it}
Len:=Rx_Buffer[Rx_Buff_Rptr].Len;
Move(Rx_Buffer[Rx_Buff_Rptr].Data,Data,Len);
Rx_Buffer[Rx_Buff_Rptr].Len:=0; {clear this buffer}
Rx_Buff_Rptr:=SUCC(Rx_Buff_Rptr) MOD Rx_Buffers; {incr pointer}
Ok:=TRUE;
END
ELSE
Ok:=FALSE; {no rx data available}
END;
Chapter IV, SCL Data Communication example programs page 185 Chapter IV, SCL Data Communication example programs page 185
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
PROCEDURE Write_Dc(VAR Buff; Len:INTEGER;VAR Ok:BOOLEAN);
BEGIN; {call this routine to send data to mainframe}
IF Dc_Write_Ok THEN {tx buffer available}
BEGIN;
Move(Buff,Tx_Buffer[Tx_Buff_Wptr].Data,SIZEOF(Buff));
Tx_Buffer[Tx_Buff_Wptr].Len:=Len;
Tx_Buff_Wptr:=SUCC(Tx_Buff_Wptr) MOD Tx_Buffers;
Ok:=TRUE;
END
ELSE
Ok:=FALSE; {no tx buffer available}
END;
Chapter IV, SCL Data Communication example programs page 186 Chapter IV, SCL Data Communication example programs page 186
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Description of SAMPLE8.PAS Description of SAMPLE8.PAS
The following is a broad discussion of the datacom routines used in
example program 8 including some useful hints on how to implement
such datacom protocols in a SCL program.
Poll-Select Terminal Protocol Handling System Poll-Select Terminal Protocol Handling System
The main routines in this system are 'Write_DC', 'Read_DC' and
'PS_Handler'.
'Write_DC' does not actually write to the datacom line (this is done
by the underlying SCL Datacom system under the control of
'PS_Handler'). It just places the message to be sent into the first
available transmit buffer. If no empty buffer is available (i.e queue
full) an error code is returned to the calling procedure within the
user program.
'Read_DC' works in a similar fashion, it just returns the message
waiting in the first read buffer. If there are no messages pending,
an error code is returned.
'PS_Handler' forms the interface to the underlying SCL Datacom
system. It runs as a background job (called from within
'HP_Background_Task'). 'PS_Handler' checks all incoming datacom
traffic for messages addressed to this terminal and acts upon them as
required.
It mimics a typical 'State Machine' in form of a big case statement
and is controlled by the variable 'State'.
Whenever the mainframe polls the terminal, 'PS_Handler' checks
whether there is a message in the write buffer. If there is none, it
sends an 'EOT', otherwise it sends the message, preceeded with a
header containing the terminal address and followed by ETX and a
block check character.
If the mainframe prompts this message with an ACK the buffer is
discarded and the pointer increased to the next buffer to be sent.
In case the mainframe sends a message, 'PS_Handler' removes the
header and the control characters and stores it in the first
available receive buffer where it then can be fetched by 'Read_DC'.
This way of implementing a datacom protocol in a SCL program takes
full advantage of SCL's background processing capabilities and allows
a user program to treat complex datacom transactions very much like
writing and reading to an ordinary file, without having to bother
about any protocol conventions and underlying logic etc.
On the following page you find a detailed description of the flow of
data through the different layers of this datacom system.
Chapter IV, SCL Data Communication example programs page 187 Chapter IV, SCL Data Communication example programs page 187
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Poll Select Handler Datacom read data flow Poll Select Handler Datacom read data flow ____________________________________________
1 The RS232 adapter hardware receives the datacom message from the
mainframe and, whenever a complete character has been received,
raises a hardware interrupt.
2. This hardware interrupt invokes SCL's Interrupt Service Routine Interrupt Service Routine
(DC_ISR) which fetches this character and places it into the
circular receive buffer.
3. 'PS_Handler', called from within 'HP_Background_Task' checks
whether one or more characters have been received since the last
time it was executing and, if this is the case, calls
'Receive_Char' to read them, one at a time, from the circular
receive buffer.
It then determines the necessary action depending on the value
of 'State'.
In case the character is not intended for this terminal it is
discarded, otherwise, if it is the last character of a control
string, 'PS_Handler' sends a prompt to the mainframe, and
finally, if it belongs to a message just being received it is
placed into the first available receive buffer. Once all
characters of this message have been received and placed into
the receive buffer, this buffer is marked valid and now
available to be read by 'Read_DC'.
4. 'Read_DC', called from within the user program, moves the
complete message from the receive buffer into the selected user
variable.
Chapter IV, SCL Data Communication example programs page 188 Chapter IV, SCL Data Communication example programs page 188
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Poll Select Handler Datacom write data flow Poll Select Handler Datacom write data flow _____________________________________________
1. Called from within the user program, 'Write_Dc' moves the
message to be sent to the first available write buffer.
2. If 'PS_Handler' receives a Pollstring it checks whether one of
the write buffers contains data to be sent and if this is the
case, passes it, together with a header, on to the procedure
'Send_Buffer'.
3. Send_Buffer then calls 'DC_Write' to send it, character by
character, out to the datacom line.
4. 'PS_Handler' then waits for an 'ACK' from the mainframe and
subsequently discards the content of the write buffer.
Chapter IV, SCL Data Communication example programs page 189 Chapter IV, SCL Data Communication example programs page 189
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Appendix A Appendix A
Sample Program Discussion Sample Program Discussion
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Introduction Introduction
In this section you be given some insight of the programming
mechanisms used in the 5 small demo programs made available to you.
Key SCL programming technic are demonstrated and discussed here.
You will be able to make ample use of these programs for training
purposes, we actually recommend that you study them thoroughly.
Having OASIS installed in your system and being already somewhat
familiar with its operation (It's dead easy, very intuitive indeed)
you will then be in a position to examine the specifications of the
formats used in these sample programs.
For each program, under the header 'What you could try:' you will 'What you could try:'
find some ideas and recommendations to familiarize yourself with SCL
and to understand the features & constructs used in the program under
review.
By following these recommendations, you will soon realize how simple
and effective the use of SCL can be. In the mean time you can
appreciate the purity of code, the speed and the flexibility provided
by OASIS SCL designed programs.
Below is a brief overview of all sample programs described herewith.
SAMPLE1 SAMPLE1
A very short program including a single format. This program is of no
practical use and is mainly intended to exhibit the basic
architecture and requirements of any SCL program.
SAMPLE2 SAMPLE2
A simple program to print mailing labels on your printer.
SAMPLE3 SAMPLE3
A program demonstrating how the SCL format stack works. In this
example, up to 10 formats are displayed on the screen
simultaneously, overlapping each other.
SAMPLE4 SAMPLE4
An automatic Disk menu program. Any program can be executed directly
from the menu just by pointing to it. It can also let you wander
across all subdirectories on your disk.
SAMPLE5 SAMPLE5
A little Demo Program giving an overview on some of the features of
SCL. Run it !
Appendix A, sample programs discussion page 191 Appendix A, sample programs discussion page 191
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example 1 (OASIS Easy Fields) Example 1 (OASIS Easy Fields) ______________________________
Due to its simplicity, the first example program offers little
practical use, but beside showing the very basic structure and the
minimum requirements of any SCL program it is perfectly suited for
your first acquaintance with OASIS.
It consists of the following files:
SAMPLE1.SCS : The format file, containing a single format.
SAMPLE1.SCI : The index file to above.
SAMPLE1.MSG : Contains all Field Messages. Field Messages
SAMPLE1.PAS : The Turbo Pascal source program as listed below.
SAMPLE1.EXE : Compiled version of SAMPLE1.PAS.
Below is a complete listing of SAMPLE1.PAS. It is meant to give you
some basic knowledge about programming with SCL. As you can see it
can't be easier. Note how little code is required.
PROGRAM first;
{$V-} {No Length Checks for Strings. Mandatory for SCL} USES
SCL; {Make SCL accessible}
PROCEDURE handle_first; {This Procedure handles format 'first'.}
BEGIN;
Select_Format('first'); {Load the format from disk}
Display_Format(0,0); {Display it in the upper left corner}
REPEAT
Handle_Format; {Complete Loop to handle format input}
UNTIL Format_Done; {Either completed or abort key pressed} END;
BEGIN; {of main}
Select_Format_File('Sample1'); {initialize SCL and load the}
{format file 'Sample1'}
handle_first; {load,display and handle the format}
Close_Formats; {terminate SCL }
END. {of main}
Appendix A, sample programs discussion page 192 Appendix A, sample programs discussion page 192
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Explanations of SAMPLE1.PAS Explanations of SAMPLE1.PAS
Compiler Option '$V-' Compiler Option '$V-'
This Option is required in any SCL program. More details about
compiler options can be found in your 'TURBO PASCAL' manual. Without
this compiler option specified SCL programs won't compile.
USES Statement USES Statement
"USES SCL;" makes SCL accessible from within this program.
Main Program Main Program
The first statement is Select_Format_File('Sample1');. This procedure Select_Format_File('Sample1');
initializes SCL and all required files. Since no file SAMPLE1.ERR
exists in this case, SCL only initializes the error numbers (without
the messages).
'Select_Format_File' is the first SCL statement to be executed and it
appears only once in any program.
Close_Formats; is the last SCL statement. It`closes all files and Close_Formats;
frees the memory space previously used by SCL.
Between these two statements, the procedure which processes the
format in this program, Handle_first, is called. Handle_first
Format Handling Format Handling
The procedure 'Handle_First' performs the complete handling of our
screen format.
The first statement, 'Select_Format('first');' loads our format (with 'Select_Format('first');'
the name 'First') from the format file into the format stack in
memory.
'Display_Format(0,0);' then displays it on the screen starting at the
upper left corner (Displacement 0,0).
Then follows the actual format handling loop:
REPEAT
Handle_Format;
UNTIL Format_Done;
Appendix A, sample programs discussion page 193 Appendix A, sample programs discussion page 193
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The same Loop is used to process any format in SCL. The procedure
Handle_Format is exited when any of the following occurs: Handle_Format
* Before a new field on the format is initialized (=entered)
* Before a field is left
* Before the format is left (if it is finished)
* and, optionally, depending on the format specifications, if a
User Function Key has been pressed. User Function Key
The boolean function 'Format_Done' returns FALSE as long as the 'Format_Done'
format has not been finished.
The format is considered to be finished if any one of the following
conditions occurs:
* All mandatory fields are filled in and either 'Escape' was hit
or 'Return' was pressed while being in the last field.
* The 'Abort' key (F10) is pressed.
Apart from reading and writing fields and, the format handling loop
is always the same, independent of the number and type of fields on a
format. In fact, the above loop can fulfill the handling of any SCL any
screen format. There is no need to define any logic for Help screens,
Display of messages, Input error handling, field check and so on.
All this is performed automatically by SCL as part of the Format
Specifications which can be modified anytime via SFD.
Note: This program does not provide the facility to read or to write Note:
into fields. This will be covered in the next examples.
What you could try : What you could try :
1. Run the program and see what happens.
2. Load the format into SFD and study its specifications.
3. Add a field to the format 'First' and/or re-specify existing
fields.
4. Create your own format and modify the program to process it
according to your requirements.
Appendix A, sample programs discussion page 194 Appendix A, sample programs discussion page 194
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example 2 (OASIS Print Labels) Example 2 (OASIS Print Labels) _______________________________
This program captures address data from a screen format and uses it
to output a specified number of mailing labels on your printer. Its
basic structure is exactly the same as in example 1. For this reason
only the new features are discussed.
Notice the use of prompt and error message fields (called output output
field in OASIS) at the bottom of your screen. field
The error messages are held in a file called SAMPLE2.ERR. Failing to
provide such file would still produce error numbers. In this very
case SAMPLE2.ERR is just a straight copy of 'SCL.ERR' therefore
exclusively contains messages for SCL internal errors handling rather
than any user defined ones.
References to other files description can be found in example 1.
It consists of the following files:
SAMPLE2.SCS : The format file, containing a single format.
SAMPLE2.SCI : The index file to above.
SAMPLE2.MSG : Contains all Field Messages. Field Messages
SAMPLE2.PAS : The Turbo Pascal source program as listed below.
OAS2LAB.EXE : Compiled version of SAMPLE2.PAS.
The format file SAMPLE2.SCS The format file SAMPLE2.SCS
It contains 3 formats:
'Address' : The label entry format.
'Autohelp': See the AutoHelp Feature and the note below. AutoHelp Feature
'Forhelp' : Specified as the format to be displayed if F1 is F1
pressed in the global specifications of 'Address'.
Note: In case 'Autohelp' cannot be found, SCL displays the adequate Note:
error message. Setting the SCL variable 'Autohelp_Set' to false would
prevent its display.
For the format 'Address', no Field Help Formats have been specified. Field Help Formats
Appendix A, sample programs discussion page 195 Appendix A, sample programs discussion page 195
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Explanations of SAMPLE2.PAS Explanations of SAMPLE2.PAS
The following describes all new SCL constructs introduced with this
program. You can find the complete program listing on your
distribution disks.
Beep_Time:=2; Beep_Time:=2;
This statement changes the duration of SCL's 'Beep' sound. By default
this value is set to 4. Modifying it as shown above causes the 'Beep'
to be shorter.
Most of the other SCL default values can be modified in exactly the
same fashion.
REPEAT {stay in loop until 'Abort' is pressed}
Get_Data; {display format and obtain data}
IF NOT Format_Aborted THEN {format contains valid data}
Print_Labels; {then print the desired labels}
UNTIL Format_Aborted; {F10 ('Abort') key was pressed}
'Get_Data' is the familiar format handling loop, literally identical
to the one discussed in example 1.
'Format_Aborted' is a boolean variable, which is TRUE if a format is
aborted rather than normally completed. In other words, as long as
'Format_Aborted' is FALSE we know that the format was completed in
the normal way and therefore contains valid data in agreement to the
format specifications.
'Print_Labels' contains routines to read out the content of the
format and print the appropriate mailing labels. Obviously, this can
only be done if the format contains valid data (i.e has not been
aborted).
This sequence (Display of an empty format, reading the information
and printing the desired quantity of labels) is repeated until the
user terminates by pressing 'Abort'.
Display_Format(X_Max DIV 2,Y_Max DIV 2); Display_Format(X_Max DIV 2,Y_Max DIV 2);
X_Max is a function returning the maximum horizontal displacement
possible for the current format. Y_Max returns the maximum vertical
displacement. Hence 'Display_Format(X_Max,Y_Max)' would display a
format in the lower right corner of the screen. Combined with 'DIV
2', the format is consequently displayed in the center of the screen.
Appendix A, sample programs discussion page 196 Appendix A, sample programs discussion page 196
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Reading the Format Content Reading the Format Content
The procedure 'Print_Labels' is also tasked to read the format
content. Below you find a complete listing of this procedure. Its
relevant contructs are discussed afterwards.
PROCEDURE Print_Labels; {prints desired Qty of labels using the} VAR
{data on format 'Address'}
Wrkstr: String80;
I : INTEGER;
BEGIN;
FOR I:=1 TO Nr(G_Cont(7)) DO {number of labels}
BEGIN;
IF G_Sel(1) THEN Wrkstr:=G_Cont(1) ELSE` {'Mr'}
IF G_Sel(2) THEN Wrkstr:=G_Cont(2) ELSE {'Mrs'}
IF G_Sel(3) THEN Wrkstr:=G_Cont(3); {'Miss'}
WRITELN(lst,wrkstr,' ',g_cont(4));{concatenate the above}
{with a space and the content of the 'Name' field}
WRITELN(Lst); {Blank line}
WRITELN(Lst,G_Cont(5)); {the street}
WRITELN(Lst,Capital(G_Cont(6))); {the city}
WRITELN(Lst,Charstring('=',LENGTH(G_Cont(6))));
{underline the city with '=' chars}
WRITELN(Lst);
WRITELN(Lst); {Two blank lines}
END; {for loop}
END; {procedure print_labels}
Explanations to the above Procedure Explanations to the above Procedure
As mentioned earlier in this manual, fields on formats can be read
from the very moment a format is handled ('Handle_Format') until the
next one is just about to be processed.
In our example this is done at the completion of the format.
'G_Cont(n)' is a function returning the content of field 'n' in form
of a string.
'Nr' is another function converting a string into an integer number.
Therefore the construct 'Nr(G_Cont(7)' reads the content of
field 7, converts it and returns it in form of an integer number.
Please note that there is no need to check whether field 7 really
contains an Integer number, since the relevant checks have already
been performed by SCL in accordance with the specifications of
the format itself. We can therefore be sure at this moment that the
field contains an integer in the predetermined range (1..25 in this
case).
Appendix A, sample programs discussion page 197 Appendix A, sample programs discussion page 197
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
'G_Sel(n)' is a function returning the Selected status of field 'n'. Selected
Fields 1 to 3 are arranged into a Group of constants. This means that Group
only one field can be selected at any time. Since we also have
specified this group as Mandatory, we know that at least (and only) Mandatory
one field has been selected. In our example, we find out which field
this is and move its content ('Mr','Mrs' or 'Miss') to 'Wrkstr'. The
content of field 4 (the name) is then added to it, seperated by a
blank space, and finally the whole string is printed.
Next, the content of field 5 (Street) is read and printed.
The City (content of field 6) is printed in capital letters. The
construct 'Capital(G_Cont(6))' elegantly performs this operation.
Finally to underline the city with '=' characters, the construct
'Charstring('=',length(g_cont(6)))' returns a string of '='
characters with a length of the information contained in field 6
(City).
Help system Help system
As previously mentioned, the format file for this program contains 3
formats, two of them being 'Help screens'. As you probably realized,
there is no logic whatsoever in the program to handle these screens.
In order to feature an SCL program with help screens, all you have to
do is to design them and add their names in the format specs of the
format(s) they relate to. The Autohelp screen does not have to be Autohelp
specified at all. SCL checks whether it exists and if it does, it is
automatically displayed after a predetermined number of consecutive
input errors has occurred.
The name of the 'Autohelp' format must be identical to the one
specified as 'Autohelp_Screen' in SCLs Global Declarations (Default:
'AutoHelp').
Note: Help screens relative to a Format are specified in that Note: Format
formats Global Specifications. Help screens associated with one or Global Specifications
more fields on a format are specified in the Field specifications of fields Field specifications
the appropriate field(s).
Input Messages Input Messages
In order to display explanatory field input messages in an SCL
program you just have to specify these messages in the Field Field
Specifications of the appropriate field and enter the number of the Specifications
field they should be displayed into in the Global Specifications of Global Specifications
the format. Again, there is no logic required within the program
itself for this feature to be incorporated.
Appendix A, sample programs discussion page 198 Appendix A, sample programs discussion page 198
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Error Messages Error Messages
System or user generated error messages are automatically displayed
if the number of the field they should be displayed into is specified
in the Global Specifications of the appropriate format. Global Specifications
In case no error file (<Name>.ERR) exists, only the error number will
be shown, otherwise the suitable message is displayed.
What you could try : What you could try :
1. Run the program and see what it does.
2. Try to enter invalid data and see how the program reacts.
3. Load the format file into SFD and study the specifications of
the three formats.
4. Run the program without the file SAMPLE2.ERR being available
and see what happens if you make an input error.
5. Change the parameters 'Error Msg Field' and/or 'Input Msg
Field' in the Global Specifications of the format 'ADDRESS' to
0 (zero) and run the program. See what happens.
6. Try to implement 'Field Help Screens' for 'ADDRESS'.
7. Allow the program to print up to 50 labels (25 is the current
maximum).
8. Change some other Global SCL Parameters in the program,
recompile and run it.
9. Add a field for the postal code on 'ADDRESS' and modify the
program in such a way that it is printed on the label.
Appendix A, sample programs discussion page 199 Appendix A, sample programs discussion page 199
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example 3 (OASIS Formats Stack) Example 3 (OASIS Formats Stack) ________________________________
This Program is a demonstration of the ability of SCL to stack
formats. A format is pushed on the stack whenever a new format is
loaded while the previous one is not yet finished. It is popped from
the stack, i.e. restored as soon as the format on top of the stack is
finished.
In simple terms, this program works as follows:
Load & Display format 'One'.
Start handling format 'One'.
Load & Display format 'Two'.
Start handling format 'Two'.
-- Keep doing the --
- same -
- with formats -
- 'Three' to 'Nine' -
Load & Display format 'Ten'.
Start handling format 'Ten'.
Terminate format 'Ten'.
Restore format 'Nine'.
Continue handling format 'Nine'.
Terminate format 'Nine'.
-- and so on down --
-- to format 'Two'--
Restore format 'One'.
Continue handling format 'One'.
Terminate format 'One'.
Terminate program.
This means that while format ten is being loaded, nine unfinished
formats are waiting in the stack to be continued. This may sound a
lot, but SCL can simultaneously hold far more formats in its stack
without any problems. There is no real limit apart from the size of
your computer memory.
If you should require more than 20 unfinished formats on the stack
simultaneously, you must then adjust the Global Constant Global Constant
'Max_Heap_Screens' in SCL to reflect the required maximum number of
formats. For guidelines to calculate the memory requirements of an
SCL program please refer to 'System Resource Considerations' in the
reference manual.
Note: The above consideration only refers to the number of Note:
unfinished Formats, formats that are finished before another format unfinished Formats
is loaded do not take up any space on the stack. The Total Number of Total Number of
Formats in a program is only restricted by your disk space capacity. Formats
Appendix A, sample programs discussion page 200 Appendix A, sample programs discussion page 200
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Listing of SAMPLE3.PAS Listing of SAMPLE3.PAS
PROGRAM Stackdemo;
{$V-} {Disables LENGTH Checks FOR Strings}
USES SCL; {invoke SCL}
PROCEDURE Scl_Defaults;
BEGIN;
Beep_Time:=20; {Beep shorter}
Auto_Help_Set:=FALSE; {No autohelp in this program}
END;
FUNCTION Up:BOOLEAN;
BEGIN;
Up:=FALSE;
IF User_Function THEN {user function key pressed}
BEGIN;
IF (Active_Field = 1) AND {'Up' field}
(Char_Code = Code_Return) THEN { wants to select field}
BEGIN;
Up:=TRUE;
Char_Code:=Code_Noop; { SCL should not do anything}
END { with this input character,}
END; { i.e not mark the field as }
END; { selected}
PROCEDURE Do_Format(This_Name:String10;This_X,This_Y:INTEGER);
VAR
N,
Next_Name:String10;
Next_X,
Next_Y :INTEGER;
BEGIN;
Select_Format(This_Name); {load it from disk}
Display_Format(This_X,This_Y); {display it }
Next_X:=This_X+2; {increase displacements}
Next_Y:=This_Y+1; {for the next format to be loaded}
REPEAT
Handle_Format; {handle this format}
IF Up THEN {user wants to go up}
BEGIN;
N:=Capital(This_Name); {capital letters}
IF N = 'ONE' THEN Next_Name:='Two' ELSE {Which}
IF N = 'TWO' THEN Next_Name:='Three' ELSE {format}
IF N = 'THREE' THEN Next_Name:='four' ELSE {is}
IF N = 'FOUR' THEN Next_Name:='Five' ELSE {the
IF N = 'FIVE' THEN Next_Name:='Six' ELSE {next}
IF N = 'SIX' THEN Next_Name:='Seven' ELSE {one}
IF N = 'SEVEN' THEN Next_Name:='Eight' ELSE { ? }
Appendix A, sample programs discussion page 201 Appendix A, sample programs discussion page 201
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
IF N = 'EIGHT' THEN Next_Name:='Nine' ELSE
IF N = 'NINE' THEN Next_Name:='Ten';
Do_Format(Next_Name,Next_X,Next_Y); {Recursive}
END; {call with new name and displacements}
UNTIL Format_Done; {this format is finished.}
END; {of Do_Format}
BEGIN; {of main}
Select_Format_File('Sample3'); {initialize SCL and load}
{format file 'Sample2'}
Scl_Defaults; {change some SCL defaults}
Do_Format('one',0,0); {display&handle format 'one'}
Close_Formats; {terminate SCL}
END. {of main}
Explanations of SAMPLE3.PAS Explanations of SAMPLE3.PAS
The only new features in this sample program are a User Interrupt User Interrupt
Procedure and the fact that a new format is called up while the old Procedure
one is not yet finished. There is no need to emphasize how simply
this can be achieved using SCL.
User Interrupt Procedure User Interrupt Procedure
We mentioned already in the explanations of Sample 1 that there were
four conditions under which the procedure 'Handle_format' was exited.
A User Interrupt Procedure is a user written routine which takes User Interrupt Procedure
control at this point. To accomplish this, the appropriate routine
(or a call to it) must be positioned within the format handling loop
as follows:
REPEAT
Handle_Format;
{---User Interrupt Routine----}
UNTIL Format_Done;
Hence the User Interrupt routine is always executed if User Interrupt routine
'Handle_Format' has been exited, i.e. one of the four conditions
occurred.
Among those four possible conditions one states that a User Function User Function
Key has been pressed. Key
This is actually the condition our user interrupt procedure is based
on in this example.
We want to interfere as soon as the program user tries to select
field 1 (Up). In case field 2 (Down) is selected no action is taken
and SCL terminates the format. (If no interference occurs in the case
of field 1, SCL also automatically finishes the format since there
are no further fields to be filled in).
Appendix A, sample programs discussion page 202 Appendix A, sample programs discussion page 202
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The test pertaining to the occurrence of the above mentioned
condition is performed by the boolean function 'Up'. Up returns TRUE
if:
1. A User Function Key (in this case Return) was pressed
and
2. field 1 (the 'Up' field) is currently selected.
and
3. the current Input character (char_code) is 'Return'.
If 'Up' is TRUE, the input character is replaced by a 'No-Op', which
causes SCL to ignore it later on (SCL will then act as if the Return
key was never pressed and consequently wait for User input).
If this does not happen SCL would, as soon as it regains control,
carry on from where it left off and consequently mark field 1 as
'Selected' before it automatically terminates the format.
If 'Up' returns TRUE, a recursive call to 'Do_Format' is made and the
whole process starts over again with the next format. If one format
is finished, i.e 'Down' has been selected or F10 (Abort) has been
pressed then SCL automatically restores the previous format from the
stack.
What you could try: What you could try:
1. Load the format file into SCL and study the specifications of
one of the formats (they are all identical except format
'Ten', which does not have any fields).
2. Remove the statement 'Char_code:=Code_Noop;' from the function
'Up', recompile and run the program and see what happens.
3. Write your own program without recursion and with only 2 or 3
formats (you may use the format file from this example).
Appendix A, sample programs discussion page 203 Appendix A, sample programs discussion page 203
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example 4 (OASIS Automatic Disk Menu) Example 4 (OASIS Automatic Disk Menu) ______________________________________
This example program is quite a useful DOS utility program. It
displays all executable files of the current directory along with all
subdirectories and the parent directory (if applicable) on a screen
format.
You can execute any program from the current directory or move to a
different subdirectory by just pointing to it.
When compared to the three previous examples, this one is fairly
complex and employs a lot more SCL features.
Despite (and maybe especially because of) the fact, that SCL has
certainly not been designed to develop DOS utilities, this example
demonstrates and highlights its tremendous power and flexibility.
The main new features exhibited in this program are:
- The 'Execute' and , 'ExecuteDos' routines.
- Background processing.
- More sophisticated User Interrupt Procedures.
The relevant components of the program will be discussed in the
following.
The Procedure Menu The Procedure Menu
This program only uses one Format and the procedure handling this
format is called 'Menu'. It uses some advanced technics we have not
covered yet.
In the previous examples 'Display_format' was immediately called
after 'Select_format' whereas here the format is first 'filled'
before being displayed.
The procedures involved in this task are 'Init_Dir_Search',
'Display_Files' and 'Tell_Result'.
Apart from this, within the actual Format handling loop, you find a Format handling loop
statement which invokes a User Interrupt Procedure ('Handle_Key') in User Interrupt Procedure
case a User Function Key has been pressed. If the format has been User Function Key
finished (and was not aborted), the procedure 'Do_Work' is executed.
All the above mentioned procedures are described in detail on the
following pages.
Appendix A, sample programs discussion page 204 Appendix A, sample programs discussion page 204
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Init_Dir_Search Init_Dir_Search
This procedure initializes the parameters for our Directory search.
It sets the boolean variable 'First' to TRUE and the search mask to
'*.*' (all files).
Note: 'First' is a parameter for the directory search which if TRUE, Note:
causes it to initialize a new search, i.e to find the first filename
matching the specified mask. Once the first file has been found, it
is set to false and subsequent searches will search for the remaining
files.
Display_Files Display_Files
The first part of this procedure is a REPEAT..UNTIL loop which calls
'Dir'. If 'Dir' returns a result of 0 (zero), meaning that a
filename matching the mask was found, the procedure
'Pick_it_if_we_need_it' is called, which determines whether this file
is either an executable file or a directory entry. If this is the
case, the file name is moved to the first available field and the
field count is increased by 1. In order to determine whether the file
found should be displayed on the format, we access the SCL variable
'Dta' (For details about the content of 'Dta' please refer to
'Advanced Programming Technics'in the reference manual).
We exit the REPEAT..UNTIL loop under any one of the following two
conditions: either the format is full or there are no more files
matching the mask. In the latter case we reinitialize 'Dir' by
calling 'Init_Dir_Search' again and we also blank the remaining
fields on the format. In every case, we also make a note of the
highest field on our format containing a filename entry.
Now that's where the real tricky part starts:
On this format we want to have two active fields at the same time,
one being the field containing the filename to be executed and the
other one where the optional parameters can be entered. SCL can only
have one active field at a time, therefore we have to cheat somehow.
One way to achieve this is to declare all the fields holding
filenames (2 to 46) as 'Output' fields and manipulate these fields
independent from the normal SCL field processing. This just leaves,
what SCL concerns, field 49 as the only cursor accessible field on
this format which is consequently active, i.e ready for input,
anytime the format is displayed.
In order to highlight the currently chosen filename field, we use the
'selected' field attribute. The procedure 'Handle_Keys', which
monitors the 'arrow' keys, determines which filename is to be
highlighted next and the highlighting itself is performed by the
procedure 'New_Field'.
Appendix A, sample programs discussion page 205 Appendix A, sample programs discussion page 205
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Handle_Keys Handle_Keys
This procedure acts on all User Function Keys defined for this User Function Keys
format.
In case F9 is pressed, the field holding the currently highlighted
filename is deselected and 'Display_files' is called to refill the
format.
In case the display of the current directory is not yet complete,
('first' is FALSE) the remaining entries are searched to be displayed
now, otherwise a new search cycle is initiated to display the first
page of file names.
In case, one of the 'arrows' or 'Home' or 'End' is pressed we
determine the next field (file name) to be highlighted and call
'Next_Field' to do it.
The next two keys are only intercepted for user convenience: If
'Escape' is pressed, it is replaced by 'F10' (Abort) which
subsequently causes the program to be terminated.
If 'Return' is pressed and the parameter field (49) contains spaces
this key is replaced by an 'Escape' character, which causes the
format to be terminated instantly. The reason for this is that SCL
would interpret 'Return' in this case as a command to switch field 49
to 'Edit Mode' and we would have to press 'Return' (or 'Escape')
again to finish the format, therefore this manipulation saves the
user an additional keystroke.
With the exception of the last two cases we want SCL to ignore any
other key depression by substituting 'No_Op'.
New_Field New_Field
This procedure is called with two parameters, the field currently
highlighted (due to be deselected) and the new field (the one about
to be selected, i.e highlighted).
This task is performed by the first two statements.
Once this is done, 'current field' matches the new field now being
highlighted.
In the same time frame three more fields need to be updated but
instead of being processed here it is treated as a background task
because another 'Arrow' key could also already be pressed. In this
case priority is given to handle this key first before attempting to
update any one of the three fields.
By making this task a background job we ensure that it is only done
when spare time is available, without delaying any pending keyboard
input.
In order to notify the Background processing procedure that updates Background processing procedure
are to be carried out , three boolean flags are set, one for each
field to be revised.
Appendix A, sample programs discussion page 206 Appendix A, sample programs discussion page 206
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Do_Work Do_Work
This procedure first fetches the file name from the field currently
highlighted. In case of a directory entry it changes the current
directory accordingly.
If we are dealing with an executable file instead it first builds a
string out of the filename (including path) and the parameter entry
and then executes this file. Depending on whether it is an '.EXE'
file or not, 'Execute' or 'ExecuteDos' is used.
The reason for this is that all '.BAT' and some of the '.COM' files
(mainly some external DOS commands) require COMMAND.COM to be present
while '.EXE' files can be started directly.
On return from the previously executed program, a check for
successful execution is done and if this is the case a prompt asks
the user to press 'Return' to go back to the menu program (The reason
for not going directly back is to give him a chance to read the
screen content).
In case of problems during execution we directly go back to the menu
program and 'Tell_Result' displays an appropriate error message.
Tell_Result Tell_Result
This procedure simply checks whether 'Execute' or 'ExecuteDos' caused
a result code indicating an error.
If an error occurred the relevant (user defined) error message is
displayed in field 50 and a 'beep' is initiated.
Note: More information on user defined error messages can be found Note:
under 'Advanced Programming Technics'in this appendix.
LP_Background_Task LP_Background_Task
This is assigned as a SCL background Task via the
'LP_Background_Pointer:=@LP_Background_Task;' statement in the main
body of the program.
It is called by the SCL procedure 'Handle_Format' whenever there is
no keyboard input pending and no other work needs to be done. This
procedure is used here to update fields 46,47 and 49 after a
different filename has been selected by the user. It is based on the
simple principle that whenever the procedure is entered all three
flags set by 'Next_Field' are checked.
If one of these flags is found to be TRUE the pertinent update
procedure is performed and the flag is then set to FALSE. The update
procedures themselves are clear and easy to understand and therefore
not separately described here.
Appendix A, sample programs discussion page 207 Appendix A, sample programs discussion page 207
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Example 5 (OASIS SCL Demo) Example 5 (OASIS SCL Demo) ___________________________
This program is a little demo giving an overview on some SCL
features. Although 14 different screen formats are handled it remains
a rather simple program.
It consists of a main menu proposing a selection of 8 different demos
plus the possibility to terminate the program.
In order to demonstrate background processing it also features a
display of time and date on each format.
The following is a detailed explanation of its various procedures.
Menu Menu
The Menu procedure is very straightforward. The menu format is
processed using the very same basic Format Handling Loop already Format Handling Loop
described in example 1. Once the format is finished, upon detection
of the selected field the corresponding demo procedure is called up.
In the case field 13 being selected, the boolean variable 'Progend'
becomes TRUE which then causes the program to exit the REPEAT..UNTIL
loop and subsequently terminates the demo program. The reason for
using this boolean variable rather than 'UNTIL G_Sel(13)' is simple:
Just imagine you would come from a demo format where field 13 was
selected. Since R_Ptr would still point to this demo format, R_Ptr
'G_Sel(13)' would access field 13 on this format rather than on our
menu. We must therefore make sure that we pass 'Handle_Format' (which
adjusts R_Ptr to the menu again) before any attempt to read a field.
This is realized by simply including the 'G_Sel' into our 'case'
statement.
Five out of the eight different demos are performed by just calling
the procedure 'Do_Format' with the appropriate format name while the
other three demos required some additional programming.
'Do_Format' is a simple procedure which selects a format, displays it
and then handles it.
In order to be able to blank the format when completed the User
Interrupt Procedure monitoring 'End_Of_Format' is employed. The other
three demos are a bit more complicated and will therefore be
discussed in detail.
Appendix A, sample programs discussion page 208 Appendix A, sample programs discussion page 208
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Country Demo Country Demo
Country demo demonstrates SCL's capability to work with the DOS
country information.
When compared with 'Do_Format', the main procedure of country demo
offers two additional features.
The first procedure was added to set up the fields before the format
was actually displayed on screen ('Update_Fields'). The second
procedure acts on 'End_of_field'-User Interrupts. Interrupts
Procedure Update_Fields Procedure Update_Fields
This procedure accesses some of the Country dependent Information
provides by SCL and writes it to the proper fields on the format.
Please note that the numeric (integer) values are converted to
strings using the 'St' function.
Procedure Handle_End_of_Field Procedure Handle_End_of_Field
This procedure is the actual heart of 'Country demo'. Below you can
examine its listing. All programming details are discussed
afterwards.
PROCEDURE Handle_End_Of_Field; {user interrupt procedure}
BEGIN;
IF Active_Field = 4 THEN {new country code entered}
BEGIN;
IF G_Cont(4) > ' ' THEN {not blank}
BEGIN;
Scl_Country:=Nr(G_Cont(4)); {move it to SCL_Country}
Get_Country; {get country information}
IF (Country <> Scl_Country) AND (Scl_Country > 0) THEN
BEGIN; {invalid country code was entered}
Glb_Error:=24; {error number to SCL}
Scl_Country:=Nr(G_Cont(5)); {restore old country}
Get_Country; {get country info}
END
ELSE {country code was valid}
Update_Fields; {display new country info}
END;
END;
END;
Appendix A, sample programs discussion page 209 Appendix A, sample programs discussion page 209
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The first two 'IF' statements ensure that we are in field 4 and that
this field contains data.
If this is the case, the content will be read, converted to an
integer and placed into 'SCL_Country'.
We then call the SCL procedure Get_Country' which accesses the DOS
country information and updates the relevant SCL variables
accordingly.
'Get_Country' acts as follows:
If 'SCL_Country' contains 0 (the default value) it borrows the
country information according to the setting of your computer
(Country=xxx statement in CONFIG.SYS). If SCL_Country contains any
other value (a Country-code) then SCL is set up according to this
code.
Once 'Get_Country' has been called, a check for country code validity
is performed.
It is valid when either the value returned in 'Country' is equal to
'SCL_Country' or if 0 was specified for 'SCL_Country'.
In case of invalid country code, the one previously used is restored
from field 5 (we wrote it to this field in 'Update_Fields'), and
'Get_Country' is called again with this latter value in 'SCL_Country'
to restore the variables in SCL back to valid information.
In addition, 'Glb_Err' is set to an error number pointing to a
message in SAMPLE5.ERR stating that an invalid country code was
entered.
Since 'Glb_Err' returns a value different from 0 (zero),
'Handle_Format' will enter its input error routine, beep, display the
error message and also refuse the attempt to leave field number 4
until a valid country code is keyed in.
In case of a valid code 'Update_Fields' is called once more to write
the new information into the corresponding fields.
Note: Further details about user generated error messages and the Note:
use of 'Glb_Err' can be found in this appendix.
Appendix A, sample programs discussion page 210 Appendix A, sample programs discussion page 210
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Date Demo Date Demo
Date Demo demonstrates most of the date/time routines in SCLn With
the exception that the field update procedure is called 'Prefill'
here, the main procedure of 'Date_Demo' is identical to the one
described in 'Country_Demo'.
However both 'Prefill' and the user Interrupt Procedure contain a user Interrupt Procedure
great number of new constructs which will be discussed in the
following pages.
Prefill Prefill
This procedure fills some fields with information about todays date.
First, the SCL routine 'Get_Date' is called to retrieve todays date
as integer values.
Then the 'day of week' value is converted to the actual name which is
effectively written to field 4.
The date is then converted into a julian date. Since the function
'St' cannot be used with REAL numbers, 'STR' is used instead to
convert the julian date to a string before it finally can be written
to field 5.
Handle_End_of_Field Handle_End_of_Field
User Interrupt Procedure is invoked whenever a 'End_of_Field' Interrupt Procedure
condition occurs and also in the case of fields 6 and 15.
Field 6 is the one where the user can enter a date. Upon leaving
this field, a check for data entry is performed and if something has
been keyed in the following occurs:
The procedure 'Check_Date' checks the date entered for validity and
converts it to three integers for year, month and day. (Please note,
that the date is checked according to the country information
currently used. In the case of USA (1) the date is interpreted as
MMDD whereas for most other countries it is DDMM). If the date
entered is invalid, 'SCL_Err' is set to point to a user defined error
message in SAMPLEu.ERR, which causes SCL to display this message,
beep and to reject the attempt to exit this field. In addition to
this, fields 7 to 14 are blanked out. If the date entered is
found valid, the procedure 'Update_User_Date' is called which in
turn does some calculations and writes the results to fields 7 to 14.
For field 15 the process is similar, in this case the user is
supposed to enter a valid time and if he does so, 'Up
date_User_Time' is called to analyze the time entered and to write
appropriate information to fields 16 to 19.
If the time entered is invalid, a sequence identical to the one
described for the date takes place, the only difference being the
error message.
Appendix A, sample programs discussion page 211 Appendix A, sample programs discussion page 211
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Update_User_Date Update_User_Date
This procedure uses most of the SCL date related routines. It first
writes the values for day, month and year of the date in field 6 (and
decoded by 'Check_Date') to fields 7, 8 and 9. Then these three
values are converted into a date string by 'Date_String' and written
to field 10.
The julian date is calculated, converted to a string using 'STR' (St
cannot be used for REAL numbers, only for Integers) and written to
field 11.
After this, the number of days between today and the date entered is
calculated by simply subtracting them from each other and converting
the result to a positive number. This value is written to field 12.
The procedure 'weekday' is used to calculate the 'day_of_week'. The
result, an Integer number between 0 (sunday) and 6 (saturday) is then
converted into the matching day name and written to field 13.
100 days are then added to the julian date, the result is converted
back into year, month and day via the procedure 'Normal_Date',
formatted with the function 'Date_String' and finally written to
field 14.
Update_User_Time Update_User_Time
This rather simple procedure converts the integer values for hours,
minutes and seconds of the time entered into field 15 to strings and
writes them to fields 16, 17 and 18.
These values are then converted to a formatted time string by the
function 'Time_String' and written to field 19.
Appendix A, sample programs discussion page 212 Appendix A, sample programs discussion page 212
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Special Fields Demo Special Fields Demo
Main procedure Main procedure
This procedure is identical to those used for the 'country' and
'date' demos with one exception however; it embeds an additional User User
Interrupt Procedure, which monitors the keyboard keys. This User Interrupt Procedure User
Interrupt Procedure, 'Handle_User_Function' is probably the most Interrupt Procedure
interesting part of this demo because it reveals some useful tricks
which you will find most helpful when writing your own application
programs.
Handle_User_Function Handle_User_Function
This procedure deals with fields that have the 'Char Check' field
attribute set to TRUE.
It is therefore executed whenever one of these fields is active and
any keyboard key is pressed. Each field will be discussed separately.
Note: The reason for using 'Char Check' here is quite simple: in Note:
this demo we have to take into consideration far more keys than the
maximum number that can be specified as 'User Functions' on one
format (10, plus any of the function keys).
In a real world program it would probably be preferable to specify
'User Function Keys' because, beside the fact it is faster
('Handle_Format' is not interrupted for each single key) it also can
save you programming work since you would know that the key pressed
must belong to the specified set.
Field 5
If the input key is a 'Space' the content of the field is changed to
something else. In this example we only use three different
possibilities but in a user program it could also be any other
number.
This field shows a nice way to make programs more userfriendly which,
in many cases can also save an additional menu.
Field 6
While this field is active we check if one of a specified set of keys
has been pressed, and if this was the case, an appropriate string is
written into the field. This construction can equally be used in the
same manner as the one demonstrated with field 5.
Appendix A, sample programs discussion page 213 Appendix A, sample programs discussion page 213
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Field 7
When active this field displays the ASCII Code of each key pressed
with the exception of 'Return' which moves us to the next field. The
SCL internal character code notation is as follows: if the key
creates a two byte code (an ASCII Code preceded by a 'ESC'
character), 1000 is added to it, otherwise the normal ASCII value is
kept.
Field 8
The handling of this field is simple, each input character (if it is
not a 'two byte key') is converted to upper case and then displayed.
This can be useful in many application programs as well.
Note: In all cases, where you don't want SCL to take any action on a Note:
character, simply replace it by 'Char_NoOp'. SCL will then just
ignore it.
Handle_End_of_Field Handle_End_of_Field
This procedure monitors field 4 and checks whether it is selected or
not.
If selected it writes 'Yes' to its content, otherwise 'No'is written.
Similarly the same method can be used in all cases where the
objective is to display the state of a field with text rather than
with a display attribute.
Background Processing Background Processing
The capability to support background processing is one of the most
powerful features of SCL.
In this example program it is used to display the time and the date
(obviously, you can do a lot more with it).
In this example program the current date and time are displayed in
two fields on each format and 'LP_Background_Task' is used to update
these fields constantly.
'LP_Background_Task' simply checks whether the actual time and date
is still reflected by the content of the two fields and if this is
not the case, updates them.
Appendix A, sample programs discussion page 214 Appendix A, sample programs discussion page 214
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Appendix A, sample programs discussion page 215 Appendix A, sample programs discussion page 215
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Screen Control Language The Screen Control Language
(SCL) (SCL)
SCL System Details SCL System Details
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Service Routines Service Routines
Interrupt Service Routines are routines which are called to handle
events within your computer. They are normally located in the
computers BIOS (Basic Input Output System). A user program can take
over the handling of interrupts. This is accomplished by placing the
address of its own interrupt routine into the BIOS Interrupt Vector
table.
SCL takes control of two interrupts with its own routines:
The clock tick interrupt (Interrupt 1CH) The clock tick interrupt (Interrupt 1CH)
This interrupt is called by the BIOS time handling routines (Hardware
Clock) 18.2 times per second (about once every 55 milliseconds).
Every time Interrupt 1CH is called by the BIOS, control is passed to
the routine 'Clock_ISR' in SCL which then performs the necessary SCL
internal functions before control is returned to BIOS. These
functions are to control the duration of the 'Beep' Sound and the
field blinking frequency (see also the description of 'Blink_Count').
By using an Interrupt service routine instead of a normal SCL
procedure to manage these tasks it is ensured that they are performed
entirely independantly of the logic of your application program and
SCL itself. Hence a lot of unnecessary overhead is avoided because
instead of waiting for an event, SCL can perform other functions.
Consider the following example of a typical 'Beep' routine:
PROCEDURE Do_Beep;
BEGIN;
SOUND(500);
DELAY(250);
NOSOUND;
END;
If SCL was programmed like this, one would have to wait 250
milliseconds for this routine to exit without being able to do
anything else. This would not only slow down the program considerably
but it would also make background tasks like datacom etc.. virtually
impossible.
For this reason, the 'Beep' routine in SCL looks in principle as
follows:
PROCEDURE Beep;
BEGIN;
SOUND(Beep_Frequency_1);
Beep_Counter:=Beep_Length;
END;
Appendix A, SCL system details page 217 Appendix A, SCL system details page 217
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Instead it is left to 'Clock_ISR' to decrement 'Beep_Counter' and to
issue a 'NOSOUND' when the counter has reached 0 (zero). 'Clock_ISR'
is installed by the routine 'Get_Clock_Tick' which is called by
'Select_Format_File' during the initialization of SCL. It is
deinstalled (the pointers in the BIOS Interrupt Vector Table are
restored to their original values) by either 'Close_Formats' or, in
case of an error, by 'Fatal_SCL_Error'.
The Data Communications Hardware Interrupt (Interrupt 0CH) The Data Communications Hardware Interrupt (Interrupt 0CH)
This interrupt is handled by a SCL Interrupt Service routine in case
your program involves data communications.
It is a Hardware Interrupt signalling several conditions on the
asynchronous communications port (COM1:). SCL uses this interrupt in
its 'Low Level' data communication system to recognize if a character
has been received on the RS232 interface and to read this character
into its receive buffer. For further information on SCL's Data
communications routines please refer to Appendix B.
Note: Do not call a Interrupt Service Routine directly from your Note:
program because it could hang the system and make a reboot necessary.
The same applies for the ISR installation and deinstallation
routines.
Appendix A, SCL system details page 218 Appendix A, SCL system details page 218
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Background Processing Tasks Background Processing Tasks
SCL provides two 'userhooks' for background processing tasks, one
referred to as 'Low Priority' and the other as 'High Priority'.
SCL provides these 'userhooks' in form of two pointer-variables,
'LP_Background_Pointer' and 'HP_Background_Pointer'.
The Procedures these pointers point to are performed by SCL as
Background Tasks.
If SCL is initialized, both pointers point to dummy procedures within
SCL which only contain a begin-end statement.
These pointers can be redirected by you to point to any other
procedure which is subsequently performed as background task by SCL.
You can basically specify any procedure as a background task as long
as you follow a few rules:
The procedure may not contain any statements which could cause to
wait it on an event, like for example 'keypressed'.
A Background Procedure must be compiled with the 'Force far calls'
option active ( {$F+} ).
Both Background Tasks are being called from within the SCL procedure
'Handle_Format'. 'Handle_Format' is event driven. This means that a
loop containing several conditional statements is continuously
executed and whenever one of the these conditions becomes TRUE the
appropriate task is performed. In addition to the background
procedures, the other tasks are reading the keyboard if a key is
pressed, processing an input character and updating field attributes.
The logic within this loop is as follows:
1. Start
2. Perform the High Priority background task (unconditionally,
once per loop).
3. If a key is pressed then read it into the keyboard buffer
otherwise,
4. If a character is still being processed then carry on
processing it (processing a single character takes between
2 and 4 loops depending on its type)
otherwise,
5. If the keyboard buffer is not empty then fetch the next
character
otherwise,
Appendix A, SCL system details page 219 Appendix A, SCL system details page 219
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
6. Perform the Low Priority Background Task and, if a field
attribute needs to be updated then update it.
7. Go to Start.
As you can see, the High Priority Background Task is executed
unconditionally in every loop and the Low Priority Background Task is
executed only in case no keyboard input is waiting to be processed.
Due to the dynamic nature of such a loop, no exact figures can be
given on how often the Background Tasks are executed. As a rule of Background Tasks
thumb, on a plain PC (4.77 Mhz) HP_Background_Task is executed about
1300 times per second and in a fast AT as much as 10000 times per
second (assuming that the processing time required for the background
task itself is negligible). The figures for Low Priority Background
Tasks are roughly the same if the system is idle (typically most of
the time) but can dramatically drop at times of heavy activity.
There are certain rules you should follow if you use Background
processing in order to avoid slowing down a program:
1. Split any task into as many subtasks as possible, for example,
if you want to write output to a printer, write one character at
a time rather than the whole line.
2. Exit the Background Task procedure as quick as possible if no
work has to be performed (Preferably use the 'Exit' statement).
3. Use High Priority Background tasks only when you have to. Most
jobs can well be accomodated with Low Priority.
4. Don't use any statements in a background procedure which wait on
an event like 'Repeat until keypressed' or 'Delay(n)'.
5. If you use a High Priority Background Task, its execution time
should typically not exceed a few milliseconds, otherwise you
may slow down your program dramatically.
The following is a short example intended to give you an idea how
to use 'Background Tasks'.
Further examples can be found in some of the 'Sample' programs,
namely SAMPLE4.PAS, SAMPLE5.PAS and SAMPLE7.PAS.
Appendix A, SCL system details page 220 Appendix A, SCL system details page 220
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Program EXAMPLE;
uses Printer,SCL;
{$F+} {Force far calls}
Procedure My_Background_Task; {prints asterixes on printer while}
begin; {format is being handled}
write(lst,'*');
end;
{$F-} {reset far calls}
Procedure do_format;
begin;
select_format('main');
display_format(0,0);
repeat
handle_format;
until format_done;
end;
begin;
select_format_file('myformats');
lp_background_pointer:=@My_Background_Task; {assigns it as LP }
Do_Format; { background task}
Close_formats;
end;
Appendix A, SCL system details page 221 Appendix A, SCL system details page 221
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
READING AND WRITING FIELDS READING AND WRITING FIELDS
For a better comprehension of the mechanisms that govern the
handling of formats the following scenario will be used as working
platform:
1. Select format A and display it on the screen.
2. Select format B and display it on top of format A.
3. Exit format B restoring format A in its integrity on the
screen.
4. Exit format A
5. Select format C and display it on the screen.
6. Exit format C.
For each step a status of the various pointers is given along with
any relevant annotation.
Select_Format_file('thisfile'); ** STEP 1 ** ** STEP 1 **
The format stack is still empty and all S_Ptr, R_Ptr, W_Ptr do not
point yet to any valid format. In other words no field can be
accessed, whether read or written at this point in time.
Select_Format('A');
Format 'A' is loaded into record 1 of the format stack. Both S_Ptr
and W_Ptr point to this record and take 1 for value. From now on it
is possible to write to format 'A'. However read of format 'A' is
still not possible since R_Ptr does not point yet to a valid format.
Display_format(0,0);
This statement does not affect the value of the pointers.
Repeat
Handle_Format;
This is where R_Ptr is adjusted making a read from format 'A'
possible. All three pointers are now pointing to format 'A' and have
a value of 1.
Select_Format('B'); ** STEP 2 ** ** STEP 2 **
A second format is now selected coexisting with format 'A' which
remains on the stack with entry number 1 while format 'B' is loaded
to the top of the stack assigned to record number 2. As a result both
W_Ptr and S_Ptr point to format 'B' and have 2 for value while R_Ptr
is still looking at format 'A' with its value remaining unchanged
(1). For this reason the construct W_Cont(5,G_Cont(4)); is
interpreted as read the content of field 4 of format 'A' and place it
into field 5 of format 'B'. By manually altering the W_Ptr value (ie.
'W_Ptr:=1') it is still possible to write to format 'A' should you
fancy it.
Display_format(0,0);
Pointers keep their previous value.
Repeat
Handle_Format;
All three pointers are now pointing to format 'B'.
UNTIL Format_Done; ** STEP 3 ** ** STEP 3 **
This statement finishes format 'B' letting SCL restoring format
'A'and implicitly having both S_Ptr and W_Ptr point to format 'A'
with a value of 1 again. R_Ptr however is still pointing to format
Appendix A, SCL system details page 222 Appendix A, SCL system details page 222
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
'B' keeping its value unchanged (2). The construct
'W_Cont(5,G_Cont(4)); would now mean: read the content of field 4 of
format 'B' and place it into field 5 of format 'A'.
UNTIL Format_Done; ** STEP 4 ** ** STEP 4 **
This finishes format 'A' and both W_Ptr and S_Ptr do not any longer
point to a valid format and have 0 for value. The R_Ptr however still
point to format 'A'. The construct 'WrkStr:=G_Cont(5) would then read
the content of field 5 on format 'A' into WrkStr. Although both
formats are now finished, this does not mean that they were destroyed
but still remain in the stack. For that matter a manual manipulation
of R_Ptr is genuinely possible and effective (ie. 'R_Ptr:= 2'; to
point to format 'B'.
Select_Format('C'); ** STEP 5 ** ** STEP 5 **
This loads format 'C' to record 1 of the format stack physically
overwriting format 'A' previously sitting there. Both S_Ptr and W_Ptr
point to format 'C' taking 1 for value while R_Ptr does not point to
any format any longer and becomes 0.
Display_format(0,0);
The pointers are not affected.
Repeat
Handle_Format;
Now all three pointers point to format 'C' and have a value of 1.
UNTIL Format_Done; ** STEP 6 ** ** STEP 6 **
At this moment both S_Ptr and W_Ptr no longer point to a valid stack
record and have the value 0. R_Ptr however still points to format 'C'
and keep its value of 1. The stack itself has format 'C' in record 1
and format 'B' in record 2. Any subsequent format would load on top
of format 'C'.
As seen in this scenario, unfinished formats always remain in the
stack while finished formats stay in the stack until they are
overwritten by new formats. While a format is still in the stack, its
content can always be accessed by manual modification of the
appropriate pointer to the desired record number.
Appendix A, SCL system details page 223 Appendix A, SCL system details page 223
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL Input Character Processing SCL Input Character Processing
All Input Character processing in SCL is done by 'Handle_Format'. The
sequence of events is as follows:
1. Read a Character from the Input Buffer into 'Char_Code'. Then go
to 2.
2. If Char_Code is specified as a User function Key in this format User function Key
or if Char Check is specified for the active field then set Char Check
'User_Function' to TRUE and exit 'Handle_Format' and go to 3
upon return; otherwise go directly to 3.
3. If 'Glb_Err' > 0 or char_Code = NoOp then discard Char_code and
go to 1; otherwise if Char_Code is invalid then perform the
input error routine and then go to 1; otherwise go to 4.
4. If this character is to be displayed, display it and then go to
1; otherwise go to 5.
5. If Char_Code is a 'Help' key then perform the appropriate Help
routine and then go to 1; otherwise go to 6.
6. If Char_Code terminates the current field then perform the
internal validity check as specified for this field. In case of
failure perform the error routine, discard the character and go
to 1; otherwise set 'End_of_Field' to TRUE, exit 'Handle_Format'
and go to 7 upon return.
7. If Glb_Err > 0 then perform the error routine, discard the
character and go to 1; otherwise, if char_Code = NoOp then go to
1; otherwise terminate the field and go to 8.
8. If this character terminates the format as well then go to 10
otherwise go to 9.
9. Determine the next field and initialize it (make it the 'Active
Field'). Then set 'Begin_of_Field' to TRUE and exit
'Handle_Format. Upon return go to 1.
10. Perform the internal format end check (all mandatory fields
filled in). If this fails, perform the error routine, discard
the input character and go to 1; otherwise set 'End_of_Format'
to TRUE and exit 'Handle_Format'. Upon return go to 11.
11. If 'Glb_Err' > 0 then perform the error routine, discard the
input character and go to 1; otherwise if Char_Code = NoOp then
go to 1; otherwise terminate the format.
Appendix A, SCL system details page 224 Appendix A, SCL system details page 224
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Error Message File The Error Message File
The file <Name>.ERR is the only SCL file not automatically created by
SFD. It is a simple ASCII text file and can be modified with most
word processors (or Turbo Pascal, for example). The first 21 records
and records 36 to 39 are occupied by SCL internal error messages, all
other records are available for your own use.
You find a 'virgin' errorfile only containing the SCL internal error
messages on your distribution disks under the name 'SCL.ERR'. The
contents of SCL.ERR is also listed in Appendix B. You can simply copy
this file to <Workfile>.ERR and then add your own messages as
required. The records may contain any text and are not bound to a
special format. The only limitation is that their maximum length may
not exceed 70 characters.
On top of SCL internal error messages, this file can be used to store
your own error messages as well as any other strings you may require
in your program.
All you have to do to display a specific message in the event of an
error occuring while processing a format is to set 'Glb_Err' to the
appropriate record number.
If you just want to access a string stored in the error file you can
use the SCL function 'Sys_Msg'.
Since during execution of an SCL program, all records of this file
are stored in the heap memory, access to them is very fast. Please
note that an error file is optional for an SCL program. If it is not
found during the initialization of SCL, the appropriate record spaces
in the heap are initialized with just their corresponding record
number which will then be displayed should an error be found.
Example: Example:
Select_Format('X');
W_Cont(2,Sys_Msg(18)); {writes content of record 23 to field 2}
Display_Format(0,0);
REPEAT
Handle_Format;
IF End_of_Format THEN
IF not (G_CONT(1) in ['A'..'D','a'..'d']) THEN
Glb_Err:=43; {SCL will execute its error routine and}
{display the string stored in record 43 in}
{the error message field, the attempt to}
{terminate the format will be refused} UNTIL Format_Done;
Note: See also Programming sample 4, 'Tricks & Tips' and 'System Note:
Resource considerations'.
Appendix A, SCL system details page 225 Appendix A, SCL system details page 225
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
SCL - System Resource Considerations SCL - System Resource Considerations
Disk Access Disk Access
SCL reads its formats from disk. This process can be speeded up
considerably by including a 'BUFFERS=NNN' statement into the
CONFIG.SYS file. It is recommended to set the number of buffers to at
least 20 on computers running SCL programs.
Another effective way is the use of a RamDisk or, preferably, a Disk
Cache Software (for example 'Lightning' from PCSG Inc).
Processor Requirements Processor Requirements
SCL performs well on any compatible PC system. Due to a highly
optimized program layout, the speed differences to be expected
between a 8088 and a 80286 based system are relatively small if
compared with some other programs. The performance of an 8088 System
running an SCL program can be increased considerably by exchanging
the 8088 processor against a NEC V20. The V20 features, beside being
fully compatible with the 8088, a highly optimized string handling
which results in about 20 % performance improvement if used with SCL
programs.
Format File -Disk Space Requirements Format File -Disk Space Requirements
The format file occupies 4608 bytes per format.
This means that a 360 KB Floppy can hold a format file with up to 79
formats. The other SCL files are relatively small and typically only
take up a few kilobytes all together.
SCL Code Space Requirements SCL Code Space Requirements
SCL takes up about 15 to 35 KB of space in the code segment
(Dependent on the number of SCL routines you use).
SCL Data Space Requirements SCL Data Space Requirements
SCL stores most if its informations in the Heap, therefore the actual
space required in the data segment is relatively small. It depends
largely on whether Datacom is used or not and is typically between
3.5 KB (no datacom) and around 10 KB if datacom is used.
Within the heap memory, the static space required by SCL is about
12 KB plus the size of the file "<name>.MSG".
In addition to the static space, SCL`dynamically allocates during
program runtime 4.6 KB for every format required to be stacked (refer
to SCL Details for more informations on the format stacking
mechanism).
Appendix A, SCL system details page 226 Appendix A, SCL system details page 226
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The heap shares its space with the program stack.
There is no exact way to predict the size of the stack required for a
program. It largely depends on the program's logical structure,
especially if recursive routines are used.
The only way to find it out is by 'trial and error', i.e by
decreasing it until the program does not run anymore.
Total Memory Requirements Total Memory Requirements
Example1: A small SCL program with about 5 to 10 screen formats, no Example1:
datacom and 100 field input messages. Format stacking is assumed to
occur to up to 3 levels, i.e max 3 unfinished formats can be on the
stack while a fourth one is being processed.
Example2: A very large program with 50 to 100 screen formats, 500 Example2:
field messages, datacom and extensive data space requirements.
Up to 10 formats are assumed to be stacked on the heap. The code and
data requirements quoted represent the maximum values allowed in
Turbo Pascal programs.
The approximate total memory required to run the above two example
programs can be roughly calculated as follows:
Example1 Example2
-----------------------------------------------------------------
Code space (approx) ............................. 50 KB 90 KB
Data space (approx) ............................. 10 KB 64 KB
Program Stack (approx) .......................... 5 KB 40 KB
Heap space (static) ............................. 12 KB 12 KB
Heap space (field messages) ..................... 7 KB 36 KB
Heap space (format stacking) .................... 14 KB 46 KB
Static space required by DOS (approx) ........... 35 KB 35 KB
-----------------------------------------------------------------
Minimum total memory required to run (approx) .. 133 KB 323 KB
Example 1 could run in a 256 KB system with no problems and would Example 1
even permit another 90 KB of memory to be used for a Ramdisk or
another memory resident program.
Example 2 could just run on a system with 384 KB of memory. Example 2
Note: The above figures represent only coarse guidelines assuming Note:
two typical examples. The exact requirements of a specific program
are influenced by many different factors and may deviate from these
examples quite considerably.
Appendix A, SCL system details page 227 Appendix A, SCL system details page 227
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Tips & Tricks Tips & Tricks
Entry of Characters not normally accessible via the keyboard Entry of Characters not normally accessible via the keyboard
During the design of a format layout it is possible to redefine any
keyboard key to any other character by using SFD's keyboard
redefinition feature. Outside of the Layout Designer, such a feature
does not exist. If you have to enter such a character outside the
layout designer (for example to define a graphic character as a field
delimiter), you can use a BIOS feature: Press the 'ALT' key, hold it
down and key in the ASCII`value of the desired character in decimal,
then release 'ALT'.
This feature works on most 'compatible' machines and you can use it
in many other programs as well.
Blinking Fields Blinking Fields
In case you use the 'Blink' field attribute set the SCL Constant
'Timer_Intervall' to a very low value. Fast blinking fields are much
easier on the eyes than slow blinking ones. In general, for ergonomic
reasons, try to avoid blinking fields at all whenever possible.
Use of the 'Intensity' field attribute on Color systems Use of the 'Intensity' field attribute on Color systems
If you use the 'Intensity' attribute together with 'Invert' to mark a
field 'active' careful selection of the field background color can
lead to interesting effects. If you assume for example 'Brown' as the
background color this will lead to 'Yellow' foreground if the field
becomes active.
The 'Selected' Attribute in Menus The 'Selected' Attribute in Menus
If a format only contains one group of 'Constant fields' like a
typical menu, don't be concerned about any 'Selected' attributes
since this format will instantly be terminated as soon as a field has
been selected and for this reason it would never be visible anyway.
Probably the nicest combination for such a field is to select
'Inverted' for active fields and no attributes at all for 'Selected'.
Appendix A, tips and tricks page 228 Appendix A, tips and tricks page 228
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Preventing automatic termination of a format Preventing automatic termination of a format
In some cases it may be desirable to prevent a format from being
automatically terminated after the last field has been filled in. To
achieve this, just add another field (A Constant) after the last
field and ask the user via a message to press 'Return' to end the
format (See Sample5).
Highlighting text on screen formats Highlighting text on screen formats
You can simply highlight text on a format by declaring this area of
text as an 'output' field, then specify the field as being selected
and choose the appropriate 'Selected' attributes according to the
appearance you desire. If you want to switch the highlighting on and
off while the format is being displayed, just use the 'W_Sel'
construct.
Special Fields Special Fields
See Programming sample 5 for some suggestions and ideas.
Storing strings in <Name>.ERR Storing strings in <Name>.ERR
It is good practice to store text strings in the error message file
instead of hardcoding them into the program itself. Any text stored
in the error message file can be easily modified without recompiling
the program which makes customization and/or nationalization much
easier.
Any strings stored in the error message file can be accessed using
the function 'Sys_Msg'.
Appendix A, tips and tricks page 229 Appendix A, tips and tricks page 229
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Using Field Input Messages for Help Screens Using Field Input Messages for Help Screens
Especially on small formats it is not always possible to display
field input messages. Using a 'User Interrupt Procedure', you can
display these messages in an own format whenever for example 'F2'
(Field Help) is pressed.
This works as follows:
Design a small format with just one 'output' field big enough to hold
the field input message (70 characters long).
Write a procedure similar to the following (assuming you named the
above format 'Msg').
PROCEDURE Msg_Help; {Loads format 'Msg' and displays the Field}
BEGIN; {Msg of the present field in it if F2 is pressed}
IF User_Function_Key and Char_Code = Code_F2 THEN
BEGIN;
WITH Stack[S_Ptr].Field[Active_Field] DO
BEGIN;
IF (Field_Msg_Nr > 0) AND {a msg for this field exists}
(Input_Msg_Nr = 0) AND {no field to display it}
(Field_Help_Screen <= Spaces THEN {none defined}
BEGIN{
Select_Format('Msg');
W_Cont(1,User_Msg(Field_Msg_Nr); {obtain the Msg}
Display_Format(0,0);
REPEAT Handle_Format UNTIL Format_Done;
Char_Code:=Code_Noop;
END;
END;
END;
END;
To use this feature declare the trigger key (here 'F2') as a user
function key in all formats.
Within your program, make a call to 'Msg_Help' in the format handling
loop as follows:
REPEAT
Handle_Format;
Msg_Help;
{other optional interrupt handling statements}
UNTIL Format_Done;
This results in the following:
Whenever the trigger key is pressed and a message is defined for the
current field and if that format does not contain a message field and
no help screen is defined for the current field then the format 'Msg'
is called up displaying the message defined for the current field.
Appendix A, tips and tricks page 230 Appendix A, tips and tricks page 230
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Using 'Goto_Field' Using 'Goto_Field'
Sometimes it is desirable to skip one or more fields depending on a
certain entry. For example, let's assume you have a format where you
want to skip fields 5 and 6 if field 4 contains 'N'. This can be
easily realized using 'Goto_Field' as the following example shows.
REPEAT
Handle_Format;
IF end_of_field THEN
BEGIN{
IF (Active_Field = 4) AND G_Cont(4) = 'N' THEN
BEGIN;
Goto_Field(7);
Char_Code:=Code_Noop; {must do this because otherwise}
END; {we would leave field 7 again}
END;
UNTIL Format_Done;
Appendix A, tips and tricks page 231 Appendix A, tips and tricks page 231
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Appendix B Appendix B
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
This Page is intentionally left blank
Appendix B, SCL procedures & functions page 233 Appendix B, SCL procedures & functions page 233
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Alphabethic List of all User accessible SCL Procedures & Functions Alphabethic List of all User accessible SCL Procedures & Functions
Explanation of symbols used. Explanation of symbols used.
+ Full explanation in the SCL part of this manual. + Full explanation in the SCL part of this manual.
* Usage possible. See text. * Usage possible. See text.
/ Usage possible but restricted. See text. / Usage possible but restricted. See text.
F Function F Function
P Procedure P Procedure
+ P Beep;
+ P Blank_Format;
+ F Capital(Wrkstr: String): String;
+ F Charstring(Whatchar:CHAR;Len:INTEGER):String;
+ P Check_Date(VAR Date_Str:String10;VAR Y,M,D:WORD);
+ P Check_Time(VAR Time_Str:String10;VAR H,M,S:WORD);
+ P Clear_Rx_Buffer;
+ P Close_Dc;
+ P Close_Formats;
+ F Cts:BOOLEAN;
* P Cursor(Top,Bottom:byte); Sets cursor shape
* P Cursor_off; Makes Cursor invisible
+ P C_Cont(Fieldnr:INTEGER);
+ F Date:String10;
+ F Date_String(Y,M,D:WORD):String10;
* P DC(X,Y,Charcode:Byte); Writes Charcode at screen pos X,Y.
* P Dc_Break; Sends a 'Break' onto the datacom line.
+ P Dc_Diagnose(On:BOOLEAN);
+ P Dc_Write(Code:Byte;VAR Ok:BOOLEAN);
+ P Disable_Port;
+ P Display_Format(Xoffset,Yoffset:INTEGER);
+ P DosExecute:String128);
* P Draw_Char(Charcode:Byte);
Writes Charcode at current pos on screen.
+ F Dsr:BOOLEAN;
+ P Enable_Port;
+ F Environment(Env_Name:String128):String128;
+ P Execute(Progstring:String128);
+ F Exist(Fn : String80):BOOLEAN;
* P Fatal_Scl_Error(Errornr:INTEGER);
Displays error msg and halts SCL. Dont use Errornr < 4,
these are for internal use only.
+ P Finish_Format(Check:BOOLEAN);
+ F Format_Done:BOOLEAN;
Appendix B, SCL procedures & functions page 234 Appendix B, SCL procedures & functions page 234
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
* F Format_Name:string80; Returns the name of the active format
+ P Frontstring(STR:String;VAR Head,Tail:String);
* P Ftab(VAR Wrkstr:String;Fill_Char:CHAR;
Just:Position;Len:INTEGER);
Justifies Wrkstr in a field of length Len according to Just.
All blanks are replaced by Fill_Char. See declaration of type
Position.
/ F Get_Att(X,Y:INTEGER):Byte;
Returns video attribute of position X,Y. X=1..80, Y=1..25.
* P Get_Country;
Updates Country dependant Info. If SCL_Country > 0 then Info
is updated accordingly, otherwise according to CONFIG.SYS.
+ P Get_Dc_Status(VAR Status:INTEGER);
/ P Get_Next_Char(VAR Charnumber:INTEGER ; VAR Inputchar:CHAR);
Waits until a key is pressed and returns Code and Image of
the key. Code is SCL notation. Don't use together with
background processing (you're stuck until a key is pressed).
* P Get_Screen_Mode;
Sets the variables Screen_Mode, Mono_Adapter and Color_True
according to the current screen mode used.
+ P Goto_Field(Fn:INTEGER);
+ F G_Cont(Fn:INTEGER):String80;
+ F G_Sel(Fn:INTEGER):BOOLEAN;
+ P Handle_Format;
+ P Hp_Background_Task; FORWARD;
* P Input_Error(Msgnr:INTEGER);
Displays error msg in Err msg Field and beeps.
+ F Julian_Date(VAR Y,M,D:WORD):REAL;
+ F Justify_Center(STR:String;Len:INTEGER):String;
+ F Justify_Left(STR:String;Len:INTEGER):String;
+ F Justify_Right(STR:String;Len:INTEGER):String;
/ F Next_Char(VAR Esc:BOOLEAN):CHAR;
Waits until a key is pressed and returns ASCII Code. If key
generated a two byte code then 'Esc' is true. See
'Get_Next_Char' for restrictions.
+ P Normal_Date(Julian:REAL;VAR Y,M,D:WORD);
+ F Nr(St:String80):INTEGER;
+ P Open_Dc(VAR Result:INTEGER);
/ P Paint_Format_Frame(Color:Byte);
Changes video attr. of first and last row and column of current
format to color. S_Ptr must be valid ( > 0).
+ F Power(Mantissa,Exponent:REAL):REAL;
+ P Receive_Char(VAR Code:INTEGER;VAR Ok:BOOLEAN);
+ F Ri:BOOLEAN;
+ F Rnr(s:string80):real;
+ F Rst(r:Real;Decimals:integer):string;
* F Rtime:REAL;
Returns current time in hundreds of seconds since midnight.
Appendix B, SCL procedures & functions page 235 Appendix B, SCL procedures & functions page 235
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
+ P R_Cont(Fieldnr:INTEGER;VAR Contents:String80);
+ P R_Sel(Fieldnr:INTEGER; VAR Sel:BOOLEAN);
+ P Select_Format(Fname:String10);
+ P Select_Format_File(Filename:String10);
+ PSend_Buffer(VARTx_Buff;Buff_Start,Buff_Length,Bcc_add
:INTEGER;
+ P Send_Char(Code:Byte;var Ok:BOOLEAN);
+ P Send_String(Data:String255;VAR Ok:BOOLEAN);
/ P Set_Att(X,Y:INTEGER;Color:Byte);
Changes the video attribute at X,Y to color. X = 1..80,
Y = 1..25.
+ P Set_Dc_Params;
+ P Set_Dtr(On:BOOLEAN);
/ P Set_Edit_Mode(Yes:BOOLEAN);
Sets or resets edit mode. Make sure that Active_Field > 0.
/ P Set_Field_Color(Fieldnr:INTEGER;Color:Byte);
Changes video attributes of current field to color. Fieldnr
must be valid.
/ P Set_Mx(Value:INTEGER);
Move Cursor to Column = Value. Conflicts with SCL likely.
/ P Set_My(Value:INTEGER);
Move Cursor to Row = Value. Conflicts with SCL likely.
+ P Set_Rts(On:BOOLEAN);
/ P Set_Screen_Color(Color:Byte);
Changes the complete screen to color (incl all fields).
+ F St(I:INTEGER):String80;
+ P Strip(VAR Wrkstr:String;VAR Len:INTEGER);
+ F Stripleft(Wrkstr: String): String;
+ F Stripright(Wrkstr: String): String;
+ F Sys_Msg(Nr:INTEGER):String80;
+ F Time(Seconds:BOOLEAN):String10;
+ F Time_String(H,M,S:WORD):String10;
+ F Tx_Ok:BOOLEAN;
+ F Weekday(Y,M,D:WORD):INTEGER;
+ P W_Cont(Fieldnr:INTEGER;Cont:String80);
/ P W_Crt(Fieldnr:INTEGER;Msg:String80);
Writes Msg to the specified field. Does not change/Update
Format content (Screen only). S_Ptr must be valid (>0).
+ P W_Sel(Fieldnr:INTEGER;Sel:BOOLEAN);
+ F X_Max:INTEGER;
+ F Y_Max:INTEGER;
Appendix B, SCL procedures & functions page 236 Appendix B, SCL procedures & functions page 236
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Datacom Control Characters Datacom Control Characters
CONST
Nul = $0;
Soh = $1;
Stx = $2;
Etx = $3;
Eot = $4;
Enq = $5;
Ack = $6;
Bel = $7;
Con = $7;
Bs = $8;
Ht = $9;
Lf = $a;
Vt = $b;
Ff = $c;
Cr = $d;
S0 = $e;
S1 = $f;
Dle = $10;
Dc1 = $11;
Dc2 = $12;
Dc3 = $13;
Dc4 = $14;
Nak = $15;
Syn = $16;
Etb = $17;
Can = $18;
Em = $19;
Sub = $1a;
Esc = $1b;
Fs = $1c;
Gs = $1d;
Rs = $1e;
Us = $1f;
Pol = $70;
Sel = $71;
Fsl = $73;
Bsl = $74;
Del = $7f;
Appendix B, SCL procedures & functions page 237 Appendix B, SCL procedures & functions page 237
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Field Attributes and Colors Field Attributes and Colors ___________________________
Possible Field Attributes: Possible Field Attributes:
-------- Monochrome ----------
Normal Active Selected Active (Color)-----
-----------------------------------------------------------
Inverted N Y Y Y
Intensity Y Y Y Y
Underlined N Y Y N
Marked N Y 1) Y N
Blink N Y N Y
1) The marks blink if used as an attribute for 'Active'.
Note: Multiple choices of the above attributes are possible. Refer Note:
to the SFD part of the manual for restrictions applying to certain
combinations of attributes.
'Normal' and 'Selected' on color systems are specified by any valid
Foreground/Background color combination according to the table below.
Colors. (Systems with color graphics adapter). Colors. (Systems with color graphics adapter).
Background Foreground
---------------------------------------
Black Y Y
Blue Y Y
Green Y Y
Cyan Y Y
Red Y Y
Magenta Y Y
Brown Y Y
Light grey Y Y
Dark Grey N Y
Light Blue N Y
Light Green N Y
Light Cyan N Y
Light Red N Y
Light Magenta N Y
Yellow N Y
White N Y
Appendix B, SCL procedures & functions page 238 Appendix B, SCL procedures & functions page 238
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Functions in SCL Programs Functions in SCL Programs _________________________
Right : 1. In Travel Mode : Next Field. Travel Mode
2. In Entry Mode : Next Character. Entry Mode
Left : 1. In Travel Mode : Previous Field. Travel Mode
2. In Entry Mode : Previous Character. Entry Mode
Down : First field on next line.
Up : Last field on previous line.
Home : First field in line.
End : Last field in line.
PgDn : Last field on format.
PgUp : First field on format.
Tab : Next field.
ShiftTab : Previous field.
Backspace : Delete character left of cursor.
Insert : Insert a space at the cursor position.
Delete : Delete character under cursor.
Return : 1. Entry mode.
2. Finish field and advance to next field (if
already in the last field, finish the format).
3. Toggle Selected Status of a Constant. Selected
Escape : Finish Format.
F1 : Format related Help information.
F2 : Field related Help information.
F3 : UNDO. Restores field to previous content.
F10 : Abort current activity (not valid with every format).
Appendix B, SCL procedures & functions page 239 Appendix B, SCL procedures & functions page 239
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Standard SCL Error Messages Standard SCL Error Messages ___________________________
<1> Format File not found
<2> Not enough Memory to run
<3> This program requires 80 column screen
<4> Format does not fit at specified location
<5> Format not found
<6> Insufficient Mem in Heap for screen
<7> Runtime or I/O error while SCL was running
<8> Format file not sorted or integrity error
<9> Attempt to read field while format read pointer is zero
<10> Attempt to read from invalid fieldnumber
<11> Break key pressed
<12> Attempt to write to field while format write pointer is zero
<13> Attempt to write to invalid field number
<14> Invalid path specified
<15> Invalid Key Pressed
<16> Warning: End of Field
<17> Format has only one Field
<18> Input mandatory
<19> Numeric Data expected
<20> Value entered too small
<21> Value entered too big
<22>
<23>
<24>
<25>
<26>
<27>
<28>
<29>
<30>
<31>
<32>
<33>
<34>
<35>
<36> Integer number expected
<37> Helpfile not available
<38> This Helpfunction not available
<39> Autohelp-Format not found
<40>
Appendix B, SCL procedures & functions page 240 Appendix B, SCL procedures & functions page 240
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
The Shareware Idea The Shareware Idea
Shareware (sometimes called User supported Software or
freeware) attempts to provide useful programs to the PC community at
low cost by reducing the dependence on conventional marketing
channels.
Several software developers have proven that the concept works, to
the mutual benefit of the independent program authors and the PC
community itself.
The user benefits by the availability of low cost software which he
can evaluate on his own system before making the decision to purchase
it. The author benefits by being able to enter the software market
without extensive monetary risks. The user community determines
which products succeed based on their true utility, rather than on
their marketing achievements.
Appendix B, OASIS products page 241 Appendix B, OASIS products page 241
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
OASIS Products & Licencing Terms OASIS Products & Licencing Terms
The following products will be available from EUREKA SOFTWARE
ASSOCIATES:
- OASIS Demo package
- OASIS Evaluation software
- OASIS
OASIS Demo package OASIS Demo package __________________
Description Description
This package as its name indicates is only to be used for
demonstration purposes. It is ment to give you a taste of what you
can achieve with OASIS. Each demo application comes with the source
code and the associated documentation commenting each procedure. This
package does not require you to register, feel free to copy and
distribute this package and use some of its handy utilities.
Distribution Distribution
- Download
- Mail order
Pricing (No registration required) Pricing
- Download no charge
- Mail order $10
includes disk & hard copy
Appendix B, OASIS products page 242 Appendix B, OASIS products page 242
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
OASIS Evaluation (This package) OASIS Evaluation ________________
Description Description
This package is the evaluation version of OASIS. It offers almost all
OASIS features and formats (screens) created with the evaluation
version are entirely compatible with full blown version of OASIS. The
limitation of this version resides in the number of formats (screens)
you can handle in any single file, the limit is set to 20 for OASIS
Evaluation. This mean you can still create an application that
requires up to 20 screens, for more complexe applications with more
screens you need the full version of OASIS.
Distribution Distribution
- Download
- Mail order
Licencing Terms Licencing Terms
OASIS Evaluation is NOT public domain software, it is a copyrighted
product distributed by EUREKA SOFTWARE ASSOCIATES. You are hereby
granted a limited license to use OASIS, and to copy it and further
distribute it, under the following conditions:
1) No fee other than the cost of media and copying (max $10 per copy)
may be charged for such copying and distribution, otherwise
permission of EUREKA SOFTWARE ASSOCIATES is required.
2) OASIS Evaluation may ONLY be distributed in its original state,
complete and without any modifications or changes to the program
itself or to any of its data files.
3) Use without registration must be limited to a reasonable time (no
more than 14 days) and for test and evaluation purposes only, after
which it must be registered in accordance with the following terms.
Appendix B, OASIS products page 243 Appendix B, OASIS products page 243
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Commercial use: ______________
If OASIS Evaluation Software is used in a commercial & institutional
environment users must register under the 'Commercial Users Licence
Agreement' scheme. Any use of OASIS Evaluation beyond the trial
period is a copyright violation.
Conditions:
Within the terms of this agreement, a corporation, company,
institution, organization, or individual can use OASIS Evaluation to
produce programs for commercial purposes subject to the following
conditions:
1. This license applies to the OASIS Evaluation software as
described in this manual and its documentation.
2. You must treat this software just like a book ONLY ONE CPU PER
LICENSE can use the software at the same time in the original or
modified forms. However, you are authorized to make archival
copies for safekeeping.
3. You may produce any number of executable code programs for
profit for world-wide distribution with this software without
royalties to the author.
4. The license applies to the original copy of this software as
well as to updated versions which may become available. There is
no further charge for using the updated versions. The author is
neither obligated to provide updated versions nor notices of
error corrections. The author is not obligated to provide any
services of any kind to support OASIS Evaluation .
6. The user agrees to conscientiously respect the copyright to the
author of the code and not to illegally, unethically, or
neglectfully exploit the services provided by the author.
7. This code is provided "as is" without warranty of any kind,
either expressed or implied, included but not limited to the
implied warranty of merchantability and fitness for a specific
purpose. The entire risk as to the quality and performance of
the coding is with you. Should the code prove defective, you
assume the entire cost of all necessary servicing, repair or
correction.
8. In no event will the author be liable to you for any damages,
including any lost profits, lost savings or other incidental or
consequential damages arising out of the use or inability to use
this code.
9. The User acknowledges having read this agreement and the License
Statement, understands them, and agrees to be bound by their
terms and conditions.
Appendix B, OASIS products page 244 Appendix B, OASIS products page 244
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Private (non-profit) use: ________________________
If OASIS Evaluation is used privately only and not for profit making
purposes, please register under the private user licence agreement
scheme.
The applicable terms are, apart from point 3, identical to the ones
listed above.
Pricing Pricing
Registration Registration $40
does not include disk or manual
Private Licence Private Licence
includes registration, distribution disks $60
& reference manual on disk
includes registration, distribution disks $80
& with hard copy manual
Commercial Users Licence Commercial Users Licence
includes registration, distibution disks $120
& hard copy manual.
Appendix B, OASIS products page 245 Appendix B, OASIS products page 245
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
OASIS OASIS _____
Description Description
Identical to OASIS Evaluation but no limit to the number of format
per file.
Distribution Distribution
- Mail order
Note: Application available, Documentation draft version
approx. 250 pages.
Licensing terms Licensing terms
- Same as OASIS Evaluation Commercial use.
Pricing Pricing
- includes registration, distibution disks $199
& hard copy manual.
Appendix B, OASIS products page 246 Appendix B, OASIS products page 246
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
------------------------
| Invoice & Order Form | Invoice & Order Form
------------------------
=================================================================
" O R D E R F O R M " O R D E R F O R M
"==============================================================="
" Date: __ / __ / __ PO#: ______________ "
"---------------------------------------------------------------"
" Qty Description $/unit "
"---------------------------------------------------------------"
" | | | "
" __ |OASIS Demo package mail order * | $10.00 |___.__ "
" | | | "
" __ |OASIS Evaluation Registration | $40.00 |___.__ "
" |(does not include disk) | | "
" | | | "
" __ |OASIS Evaluation Private Licence * | $60.00 |___.__ "
" |(registration, disks, manual on disk) | | "
" | | | "
" __ |OASIS Evaluation Private Licence ** | $80.00 |___.__ "
" |(registration, disks and manual) | | "
" | | | "
" __ |OASIS Evaluation Commercial User Licence|$120.00 |___.__ "
" |(registration, disks and manual) ** | | "
" | | | "
" __ |OASIS Commercial User Licence ** |$199.00 |___.__ "
" |(registration, disks and manual) | | "
" | | | "
"==============================================================="
" Michigan residents add 4% sales tax Subtotal: $____.__ "
" Shipping per order Shipping: $____.__ "
" * US $3 first copy, $1 other copies Tax: $____.__ "
" ** US $3 first copy, $2 other copies Total: $____.__ " Total
"---------------------------------------------------------------"
" Method of Payment: ( ) Check ( ) Money Order "
" "
" Make check payable to: EUREKA SOFTWARE ASSOCIATES " EUREKA SOFTWARE ASSOCIATES
" 2344 Yorkshire "
" Ann Arbor, MI 48104 "
" USA "
" "
" For orders outside the U.S. please send check drawn on U.S. "
" bank in U.S. dollars, or international money order in U.S. "
" dollars. "
"==============================================================="
" Name: ________________________________________________ "
" Address: ________________________________________________ "
" ________________________________________________ "
" City: ______________________ State: __ Zip: _____ "
" "
=================================================================
Appendix B, OASIS products page 247 Appendix B, OASIS products page 247
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
------------------------
| Invoice & Order Form | Invoice & Order Form
------------------------
=================================================================
" I N V O I C E " I N V O I C E
"==============================================================="
" Date: __ / __ / __ PO#: ______________ "
"---------------------------------------------------------------"
" Qty Description $/unit "
"---------------------------------------------------------------"
" | | | "
" __ |OASIS Demo package mail order | $10.00 |___.__ "
" | | | "
" __ |OASIS Evaluation Registration | $40.00 |___.__ "
" |(does not include disk) | | "
" | | | "
" __ |OASIS Evaluation Private Licence | $60.00 |___.__ "
" |(registration, disks & manual on disk) | | "
" | | | "
" __ |OASIS Evaluation Private Licence | $80.00 |___.__ "
" |(registration, disks and manual) | | "
" | | | "
" __ |OASIS Evaluation Commercial User Licence|$120.00 |___.__ "
" |(registration, disks and manual) | | "
" | | | "
" __ |OASIS Commercial User Licence |$199.00 |___.__ "
" |(registration, disks and manual) | | "
" | | | "
"==============================================================="
" Remit to: Subtotal: $____.__ "
" EUREKA SOFTWARE ASSOCIATES Shipping: $____.__ "
" 2344 Yorkshire Tax: $____.__ "
" Ann Arbor, MI 48104 USA Total: $____.__ " Total
"==============================================================="
" SOLD TO: "
" "
" Name: ________________________________________________ "
" Address: ________________________________________________ "
" ________________________________________________ "
" City: ______________________ State: __ Zip: _____ "
" Country: ______________________ "
" "
"---------------------------------------------------------------"
" SHIP TO: "
" "
" Name: ________________________________________________ "
" Address: ________________________________________________ "
" ________________________________________________ "
" City: ______________________ State: __ Zip: _____ "
" Country: ______________________ "
" "
=================================================================
Appendix B, OASIS products page 248 Appendix B, OASIS products page 248
OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual
Appendix B, OASIS products page 249 Appendix B, OASIS products page 249